我正在使用 MVC 数据注释进行客户端验证。
你如何实现这个简单的场景:
Mark a field as required only if one radio button is selected
我正在使用 MVC 数据注释进行客户端验证。
你如何实现这个简单的场景:
Mark a field as required only if one radio button is selected
您写道您正在执行客户端验证,因此实现目标的一种方法是使用简单的 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],则必须检查保存/编辑方法中的值。
看看使用万无一失的有一个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; }
}
试试看这里,这应该为您指明正确的方向。
http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx
由于您没有发布任何代码,我假设您的单选按钮字段具有 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);
}
}
希望这可以帮助你