2012-09-06 36 views
0

我有这样的代码jQuery验证了enumdropdownlistfor

剃刀页:

  <div class="editor-label"> 
       @Html.LabelFor(model => model.Citizenship) 
      </div> 
      <div class="editor-field"> 
       @Html.EnumDropDownListFor(model => model.Citizenship) 
       @Html.ValidationMessageFor(model => model.Citizenship) 
      </div> 

型号:

[DisplayName("Гражданство")] 
[Required(ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "Required")] 
public CitizenshipEnum? Citizenship { get; set; } 

最后我得到这个HTML:

<select data-val="true" data-val-required="Пожалуйста, укажите значение" id="Citizenship" name="Citizenship"><option value=""></option> 
<option value="RF">Российская Федерация</option> 
<option value="other">другое государство</option> 
</select> 

是什么对此进行验证错误? unobtrusive.js和其他所需的脚本肯定加载(与其他输入验证正常工作)

我试图用添加自定义规则

这样来解决这个问题,但它不工作:

$(function() { 
    $.validator.addMethod('selectNone', function (value, element) { debugger; return $(element).val(); }, "Please select an option"); 

    $("form").validate({ 
    rules: { 
     '#Citizenship': { 
     selectNone: true 
     } 
    } 
    }); 
}; 

回答

0

在控制器:

[HttpPost] 
    [Authorize] 
    public ActionResult Edit (ClassOfModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      if (model.Citizenship == null) 
      { 
       ModelState.AddModelError("Citizenship", "Пожалуйста, укажите значение"); 
      } 
      // Do something (e.g. save data) 
     } 
     return View(model); 
    } 
2

我现在有同样的问题。 如果没有从下拉列表中选择项目,枚举将获得0值,也许对于jquery验证器它是一个适当的值,所以它通过验证。

所以我增加了我的枚举类型范围验证属性:

[Range(1, int.MaxValue)] 
[EnumDataType(typeof(Priority))] 
public Priority Priority { get; set; } 

之后,jQuery验证工作,因为我想要的。

注意:如果未选择任何项目,通过添加[EnumDataType]属性,模型状态将在控制器中无效,因此您可以将其用于控制​​器中的验证。

+0

它工作正常:) –

+0

另一种替代方法是使视野模型中的字段为空,并将其标记为需要。 – Jtrx