Mur*_*san 2 c# asp.net-mvc jquery jquery-validate unobtrusive-validation
我不确定为什么jquery验证在属性可以为空时触发int?并且没有标记任何数据注释属性.它的asp.net MVC 4应用程序
public class MyViewModel{
public int? ResourceId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
MyView.cshtml
@model MyViewModel
@Html.DropDownListFor(m => m.ResourceId,
((IEnumerable<SelectListItem>)ViewData["resourceLookup"]),"--Select--")
Run Code Online (Sandbox Code Playgroud)
生成的HTML
<select data-val="true" data-val-number="The field ResourceId must be a number."
id="ResourceId" name="ResourceId">
<option value="">--Select--</option>
<option value="1">Type 1</option>
</select>
Run Code Online (Sandbox Code Playgroud)
此选择框是可选的.用户可以忽略它.但是,当他们忽略我收到错误消息The field ResourceId must be a number.
在Global.asax.cs中,我尝试设置AddImplicitRequiredAttributeForValueTypes属性以防止将data-*属性添加到不需要的字段.但正如名称所说,它只能阻止添加data-required-*属性.
protected void Application_Start()
{
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes=false;
}
Run Code Online (Sandbox Code Playgroud)
如何在此处阻止数据类型检查属性(data-val-number)?
编辑:
尝试设置DataType也没用,仍然有同样的问题.看起来这不会被应用,<select>并且可能仅适用于<input>和设置type="text"
[DataType(DataType.Text)]
public int? ResourceId { get; set; }
Run Code Online (Sandbox Code Playgroud)
我有同样的问题,只是为我的下拉列表关闭了客户端验证.您可以通过设置data-val ="false"来停用此字段的验证:
@Html.DropDownListFor(m => m.ResourceId,
((IEnumerable<SelectListItem>)ViewData["resourceLookup"]),"--Select--", new { @data_val = "false" })
Run Code Online (Sandbox Code Playgroud)
这不会删除data-val-number属性,但会阻止验证.