[asp.net-mvc] mvc4 razor의 텍스트 상자에 숫자 만 허용하는 방법

우편 번호와 휴대 전화 번호, 거주지 번호를 입력하는 텍스트 상자가 3 개 있습니다. Bellow 게시물의 jquery를 사용하여 텍스트 상자에 숫자 만 허용하는 솔루션이 있습니다.

EditFor 텍스트 상자에 숫자 만 허용하고 싶습니다.

하지만 MVC4 면도기를 사용하면서 데이터 주석을 사용하여이 작업을 수행 할 수 있습니까?



답변

나는 HTML5 입력 type = number를 가지고 놀았습니다. 모든 브라우저에서 지원되는 것은 아니지만 유형별 처리 (예 : 숫자)를 처리하는 방법이 될 것으로 예상합니다. 면도기로하는 것은 매우 간단합니다 (예 : VB).

@Html.TextBoxFor(Function(model) model.Port, New With {.type = "number"})

Lee Richardson에게 감사합니다.

@Html.TextBoxFor(i => i.Port, new { @type = "number" })

질문의 범위를 벗어나지 만 모든 html5 입력 유형에 대해 이와 동일한 접근 방식을 수행 할 수 있습니다.


답변

정규식을 사용하십시오.

[RegularExpression("([1-9][0-9]*)", ErrorMessage = "Count must be a natural number")]
public int Count { get; set; }


답변

@Html.TextBoxFor(m => m.PositiveNumber,
                      new { @type = "number", @class = "span4", @min = "0" })

Razor를 사용하는 MVC 5에서는 위의 예에 따라 익명 개체에 html 입력 속성을 추가하여 입력 필드에 양수 만 허용 할 수 있습니다.


답변

텍스트 상자에이 코드를 작성 onkeypress="return isNumberKey(event)"
하고 이에 대한 기능은 바로 아래에 있습니다.

<script type="text/javascript">
function isNumberKey(evt)
{
          var charCode = (evt.which) ? evt.which : event.keyCode;
          if (charCode != 46 && charCode > 31
            && (charCode < 48 || charCode > 57))
             return false;

          return true;
}
</script>


답변

DataType 속성을 사용하십시오. 그러나 이것은 음수 값을 제외하므로 아래 정규식이이를 방지합니다.

   [DataType(DataType.PhoneNumber,ErrorMessage="Not a number")]
   [Display(Name = "Oxygen")]
   [RegularExpression( @"^\d+$")]
   [Required(ErrorMessage="{0} is required")]
   [Range(0,30,ErrorMessage="Please use values between 0 to 30")]
    public int Oxygen { get; set; }


답변

이것은 나를 위해 일했습니다.

<input type="text" class="numericOnly" placeholder="Search" id="txtSearch">

Javacript :

//Allow users to enter numbers only
$(".numericOnly").bind('keypress', function (e) {
    if (e.keyCode == '9' || e.keyCode == '16') {
        return;
    }
    var code;
    if (e.keyCode) code = e.keyCode;
    else if (e.which) code = e.which;
    if (e.which == 46)
        return false;
    if (code == 8 || code == 46)
        return true;
    if (code < 48 || code > 57)
        return false;
});

//Disable paste
$(".numericOnly").bind("paste", function (e) {
    e.preventDefault();
});

$(".numericOnly").bind('mouseenter', function (e) {
    var val = $(this).val();
    if (val != '0') {
        val = val.replace(/[^0-9]+/g, "")
        $(this).val(val);
    }
});


답변

스크립트에서이 함수를 사용하고 텍스트 상자 근처에 범위를 두어 오류 메시지를 표시하십시오

$(document).ready(function () {
    $(".digit").keypress(function (e) {
        if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
            $("#errormsg").html("Digits Only").show().fadeOut("slow");
            return false;
        }
    });
});

@Html.TextBoxFor(x => x.company.ContactNumber, new { @class = "digit" })
<span id="errormsg"></span>