可空数据类型的jQuery验证

时间:2014-07-10 13:32:49

标签: c# jquery asp.net-mvc jquery-validate unobtrusive-validation

我不确定为什么当属性可以为空int?并且没有标记任何数据注释属性时,jquery验证会触发。它的asp.net MVC 4应用程序

public class MyViewModel{

   public int? ResourceId { get; set; }

}

MyView.cshtml

@model MyViewModel

@Html.DropDownListFor(m => m.ResourceId, 
     ((IEnumerable<SelectListItem>)ViewData["resourceLookup"]),"--Select--")

生成的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>

此选择框是可选的。用户可以忽略它。但是当他们忽略时我收到错误消息The field ResourceId must be a number.

在Global.asax.cs中,我尝试设置AddImplicitRequiredAttributeForValueTypes属性以防止将data- *属性添加到不需要的字段。但正如名称所说,它只能阻止添加data-required- *属性。

protected void Application_Start()
{
 DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes=false;
}

如何在此处阻止数据类型检查属性(data-val-number)?

修改

尝试设置DataType也没用,仍然有同样的问题。看起来这不会应用于<select>,并且只能应用于<input>并设置type="text"

    [DataType(DataType.Text)]
    public int? ResourceId { get; set; }

2 个答案:

答案 0 :(得分:5)

我遇到了同样的问题,只是为我的下拉列表关闭了客户端验证。 您可以通过设置data-val =“false”来停用此字段的验证:

@Html.DropDownListFor(m => m.ResourceId, 
 ((IEnumerable<SelectListItem>)ViewData["resourceLookup"]),"--Select--", new { @data_val = "false" })

这不会删除data-val-number属性,但会阻止验证。

答案 1 :(得分:0)

设置ViewData["resourceLookup"]时,请尝试为选项-1添加Select

谢谢!