仅在字段可见时才需要validation

我在ASP.NET MVC 3中使用[Required]属性进行客户端validation。

该课程看起来像:

 public class User { [Required(ErrorMessage = "First Name is required")] public string FirstName { get; set; } } 

我希望仅在可见的情况下validation字段FirstName ,该字段仅在某些条件下显示。 我怎样才能做到这一点?

我使用了以下内容,但它仍然希望validation该隐藏字段的必填字段。

 $('#registerForm').validate({ ignore: ":not(:visible)" }); 

通过@Josiah的一些有用提示,我能够达到我的要求。

添加RequiredIfAttribute类和所需的javascript。 请参阅ASP.NET MVC 3中的条件validation

并在类中添加RequiredIf属性:

 public class User { [RequiredIf("hFirstName", "true", ErrorMessage = "First Name is required")] public string FirstName { get; set; } 

在aspx中:

 @Html.TextBoxFor(model => Model.FirstName, new { @style = "height:auto;" }) @Html.ValidationMessageFor(model => Model.FirstName) @Html.Hidden("hFirstName") 

如果隐藏了FirstName字段, hFirstName的值设置为“true”,如果可见,则将其设置为“false”。

神奇适用于这些变化。 感谢@Josiah Ruddell的回答

我会创建一个有条件的必需属性。 这里有一篇关于使用jQueryvalidation创建一篇文章的好文章。

另一种选择:您可以引用提供此function和客户端脚本的项目,如Foolproof validation(codeplex) 。

此外,您可以使用ajax加载部分视图,以便在隐藏时它们永远不会出现在页面上。 这将完全避免条件validation。

尝试我的自定义validation属性 :

 [ConditionalRequired("hFirstName==true")] public string FirstName {get, set}; 

它支持多种条件。

有点晚了,

 namespace System.ComponentModel.DataAnnotations { public class RequiredIfVisibleAttribute : RequiredAttribute { protected override ValidationResult IsValid(object value, ValidationContext context) { if (HttpContext.Current.Request.Form.AllKeys.Contains(context.MemberName)) return base.IsValid(value, context); return ValidationResult.Success; } } } 

但这是我的解决方案。

只是必需的inheritance将以相同的方式起作用,除非它仅在字段包含在已发布的键中时才会激活。