我正在使用MVC Data Annotation进行客户端验证。
如何实现这个简单的场景:
仅在选择了一个单选按钮时才根据需要标记字段
答案 0 :(得分: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验证的更多信息并执行您的变体。但要记住的是,您希望保持客户端和后端验证的一致性,因此如果从模型中删除[必需],则必须检查保存/编辑方法中的值。
答案 1 :(得分:2)
使用foolproof查看是否存在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; }
}
答案 2 :(得分:0)
试着看这里,这应该指向正确的方向。
http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx
答案 3 :(得分:0)
由于您没有发布任何代码,我假设您的单选按钮字段的标识为rdbRequired
,而您的字段名称为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);
}
}
希望这有助于你