3

我正在使用 MVC 数据注释进行客户端验证。

你如何实现这个简单的场景:

Mark a field as required only if one radio button is selected

4

4 回答 4

4

您写道您正在执行客户端验证,因此实现目标的一种方法是使用简单的 javascript 删除/修改附加到您的输入元素的验证规则:

$("#YourCheckBox").click(function(){ 
  if($(this).is(':checked')){
      $("#FirstName").rules("add","required")
  } else {
      $("#FirstName").rules("remove","required")
  }
});

您可以在此处找到有关验证插件及其功能的更多信息http://docs.jquery.com/Plugins/Validation/rules#.22add.22rules

当然,您可以轻松地找到更多关于 jquery unobutrusive 验证的信息并执行您的变体。不过要记住的是,您希望保持客户端和后端验证一致,因此如果您从模型中删除 [Required],则必须检查保存/编辑方法中的值。

于 2013-01-09T01:55:45.010 回答
2

看看使用万无一失的有一个RequiredIf属性

private class Person
{
  [Required]
  public string FirstName { get; set; }

  [Required]
  public string LastName { get; set; }

  public bool Married { get; set; }

  [RequiredIfTrue("Married")]
  public string MaidenName { get; set; }
}
于 2013-01-08T21:30:03.503 回答
0

试试看这里,这应该为您指明正确的方向。

http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

于 2013-01-08T21:29:43.917 回答
0

由于您没有发布任何代码,我假设您的单选按钮字段具有 idrdbRequired和您的字段名称 say MyField

最初按要求标记MyField

然后在你的控制器中,这样写:

 public ActionResult Index(MyModel model)
    {
       // If the radio button is not selected, MyField is marked as not required. I mean it is not validated
       if (model.rdbRequired == false)  
       {
            ModelState.Remove("MyField"); 
       }
       if(ModelState.IsValid){
       //do something
       }
       else{
             return View(model);
       }
    }

希望这可以帮助你

于 2013-01-09T10:08:23.010 回答