【发布时间】:2013-01-08 21:23:46
【问题描述】:
我正在使用 MVC 数据注释进行客户端验证。
你如何实现这个简单的场景:
仅根据选择一个单选按钮
时,才标记一个字段【问题讨论】:
标签: asp.net-mvc validation data-annotations
我正在使用 MVC 数据注释进行客户端验证。
你如何实现这个简单的场景:
仅根据选择一个单选按钮
时,才标记一个字段【问题讨论】:
标签: asp.net-mvc validation data-annotations
您写的是您正在执行客户端验证,因此实现目标的一种方法是使用简单的 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 非公开验证的更多信息并执行您的变体。不过要记住的是,您希望客户端和后端验证保持一致,因此如果您从模型中删除 [Required],则必须检查保存/编辑方法中的值。
【讨论】:
看看用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; }
}
【讨论】:
【讨论】:
由于您没有发布任何代码,我假设您的单选按钮字段的 ID 为 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);
}
}
希望对你有帮助
【讨论】: