Asp.net mvc 如何在mvc4 razor中仅允许文本框中的数字

Asp.net mvc 如何在mvc4 razor中仅允许文本框中的数字,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,我有3个文本框,其中包含邮政编码、手机号码和住宅号码。 我从下面的帖子中得到了使用jquery只允许文本框中有数字的解决方案 但是我们可以像使用MVC4 razor那样使用数据注释吗?我们可以像使用MVC4 razor那样使用数据注释吗? 不,我理解你的问题,不引人注目的验证只会显示ERORR。最简单的方法是使用jquery插件: 数据类型有第二个接受字符串的构造函数。但是,在内部,这实际上与使用UIHint属性相同 无法添加新的核心数据类型,因为DataType枚举是.NET framewo

我有3个文本框,其中包含邮政编码、手机号码和住宅号码。 我从下面的帖子中得到了使用jquery只允许文本框中有数字的解决方案


但是我们可以像使用MVC4 razor那样使用数据注释吗?

我们可以像使用MVC4 razor那样使用数据注释吗?

不,我理解你的问题,不引人注目的验证只会显示ERORR。最简单的方法是使用jquery插件:


数据类型
有第二个接受字符串的构造函数。但是,在内部,这实际上与使用
UIHint
属性相同

无法添加新的核心数据类型,因为
DataType
枚举是.NET framework的一部分。您可以做的最接近的事情是创建一个从
DataTypeAttribute
继承的新类。然后,您可以使用自己的
数据类型
枚举添加一个新构造函数

public NewDataTypeAttribute(DataType dataType) : base(dataType)
 { }

public NewDataTypeAttribute(NewDataType newDataType) : base (newDataType.ToString();

你也可以通过链接。但是我建议您使用Jquery进行同样的操作。

也许您可以使用[Integer]数据注释(如果您使用DataAnnotationsExtensions)。但是,这将只检查值是否为整数,如果已填充,则检查nót(因此您可能还需要[Required]属性)


如果启用不引人注目的验证,它将在客户端对其进行验证,但您也应该在POST操作中使用Modelstate.Valid来拒绝验证,以防有人禁用Javascript。

以下是允许您只输入数字的Javascript

订阅文本框的
onkeypress
事件

@Html.TextBoxFor(m=>m.Phone,new { @onkeypress="OnlyNumeric(this);"})
下面是它的javascript:

<script type="text/javascript">
function OnlyNumeric(e) {
            if ((e.which < 48 || e.which > 57)) {
                if (e.which == 8 || e.which == 46 || e.which == 0) {
                    return true;
                }
                else {
                    return false;
                }
            }
        }
</script>

仅函数数值(e){
如果((e.哪个<48 | | e.哪个>57)){
如果(e.which==8 | | e.which==46 | | e.which==0){
返回true;
}
否则{
返回false;
}
}
}

希望它对您有所帮助。

在文本框中编写此代码
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>

函数isNumberKey(evt)
{
var charCode=(evt.which)?evt.which:event.keyCode;
如果(charCode!=46&&charCode>31
&&(字符编码<48 | |字符编码>57))
返回false;
返回true;
}

我只是在玩弄HTML5输入类型=数字。虽然并非所有浏览器都支持它,但我希望它是处理特定类型处理(例如,数字)的前进方向。使用razor非常简单(ex是VB)

多亏了李理查森,c#way


超出了问题的范围,但您可以对任何html5输入类型使用相同的方法使用正则表达式,例如

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

您好,请尝试以下

<div class="editor-field">
  <%: Html.TextBoxFor(m => m.UserName, new {onkeydown="return ValidateNumber(event);" })%>
  <%: Html.ValidationMessageFor(m => m.UserName) %>
</div>

m、 用户名,new{onkeydown=“return validateEnumber(event);”})%%>
m、 用户名)%%>
剧本

<script type="text/javascript">
   function ValidateNumber(e) {
       var evt = (e) ? e : window.event;
       var charCode = (evt.keyCode) ? evt.keyCode : evt.which;
       if (charCode > 31 && (charCode < 48 || charCode > 57)) {
           return false;
       }
       return true;
   };

函数验证枚举器(e){
var evt=(e)?e:window.event;
var charCode=(evt.keyCode)?evt.keyCode:evt.which;
如果(字符码>31&(字符码<48 | |字符码>57)){
返回false;
}
返回true;
};
这对我很有用:

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

JavaScript:

//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);
    }
});
//只允许用户输入数字
$(“.numericOnly”).bind('keypress',函数(e){
如果(e.keyCode=='9'| | e.keyCode=='16'){
返回;
}
var代码;
如果(e.keyCode)代码=e.keyCode;
否则,如果(e.which)代码=e.which;
如果(e.which==46)
返回false;
如果(代码==8 | |代码==46)
返回true;
如果(代码<48 | |代码>57)
返回false;
});
//禁用粘贴
$(“.numericOnly”).bind(“粘贴”,函数(e){
e、 预防默认值();
});
$(“.numericOnly”).bind('mouseenter',function(e){
var val=$(this.val();
如果(val!=“0”){
val=val.replace(/[^0-9]+/g,”)
$(this).val(val);
}
});

在脚本中使用此函数,并在文本框附近放置一个span以显示错误消息

$(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>
$(文档).ready(函数(){
$(“.digit”).按键(功能(e){
如果(e.which!=8&&e.which!=0&&e.which<48 | e.which>57)){
$(“#errormsg”).html(“仅限数字”).show().fadeOut(“慢”);
返回false;
}
});
});
@Html.TextBoxFor(x=>x.company.ContactNumber,新的{@class=“digit”})

在使用Razor的MVC 5中,您可以按照上面的示例在匿名对象中添加任何html输入属性,以便在输入字段中只允许正数。

请使用
数据类型属性。这将接受负值,因此下面的正则表达式将避免这种情况:

   [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; }
  

对于大于零的十进制值,HTML5的工作原理如下:

<input id="txtMyDecimal" min="0" step="any" type="number">

函数NumValidate(e){
var evt=(e)?e:window.event;
var charCode=(evt.keyCode)?evt.keyCode:evt.which;
如果(字符码>31&(字符码<48 | |字符码>57)){
警报(“仅限编号”);
返回false;
}返回true;
}函数NumValidateWithDecimal(e){
var evt=(e)?e:window.event;
var charCode=(evt.keyCode)?evt.keyCode:evt.which;
如果(!(charCode==8 | | charCode==46 | | charCode==110 | | charCode==13 | | charCode==9)和&(charCode<48 | | charCode>57)){
警报(“仅限带有Desmal的数字,例如:0.0”);
返回false;
}
否则{
返回true;
}}函数onlyAlphabets(e){
试一试{
if(window.event){
var charCode=window.event.keyCode;
}
若否(e){
var charCode=e.which;
}
else{return true;}
如果((charCode>64&&charCode<91)| |(charCode>96&&charCode<123)| |(charCode==46)| |(charCode==32))
返回true;
其他的
警报(“仅文本和空白以及.Allow”);
返回false;
}
捕捉(错误){
警报(错误描述);
}}函数检查字母数字(e){
if(window.event){
var charCode=窗口
@Html.TextBoxFor(m => m.PositiveNumber, 
                      new { @type = "number", @class = "span4", @min = "0" })
   [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 id="txtMyDecimal" min="0" step="any" type="number">
function NumValidate(e) {
    var evt = (e) ? e : window.event;
    var charCode = (evt.keyCode) ? evt.keyCode : evt.which;
    if (charCode > 31 && (charCode < 48 || charCode > 57)) {
        alert('Only Number ');
        return false;
    }    return true;
}  function NumValidateWithDecimal(e) {

var evt = (e) ? e : window.event;
var charCode = (evt.keyCode) ? evt.keyCode : evt.which;

if (!(charCode == 8 || charCode == 46 || charCode == 110 || charCode == 13 || charCode == 9) && (charCode < 48 || charCode > 57)) {
    alert('Only Number With desimal e.g.: 0.0');
    return false;
}
else {
    return true;
} } function onlyAlphabets(e) {
try {
    if (window.event) {
        var charCode = window.event.keyCode;
    }
    else if (e) {
        var charCode = e.which;
    }
    else { return true; }

    if ((charCode > 64 && charCode < 91) || (charCode > 96 && charCode < 123) || (charCode == 46) || (charCode == 32))
        return true;
    else
        alert("Only text And White Space And . Allow");
    return false;

}
catch (err) {
    alert(err.Description);
}} function checkAlphaNumeric(e) {

if (window.event) {
    var charCode = window.event.keyCode;
}
else if (e) {
    var charCode = e.which;
}
else { return true; }

if ((charCode >= 48 && charCode <= 57) || (charCode >= 65 && charCode <= 90) || (charCode == 32) || (charCode >= 97 && charCode <= 122)) {
    return true;
} else {
    alert('Only Text And Number');
    return false;
}}
@Html.TextBoxFor(x => x.MobileNo, new { @class = "digit" , @maxlength = "10"})

@section Scripts 
{
    @Scripts.Render("~/bundles/jqueryui")
    @Styles.Render("~/Content/cssjqryUi")

    <script type="text/javascript">
         $(".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;
            }
         });
    </script>
}