可空数据类型的jQuery验证

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)

Mar*_*kus 5

我有同样的问题,只是为我的下拉列表关闭了客户端验证.您可以通过设置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属性,但会阻止验证.