仅在字段可见时才需要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将以相同的方式起作用,除非它仅在字段包含在已发布的键中时才会激活。