我在ASP.NET MVC 3中使用[Required]
属性进行客户端验证。
该课程看起来像:
public class User
{
[Required(ErrorMessage = "First Name is required")]
public string FirstName { get; set; }
}
我希望仅当字段FirstName
可见时才会对其进行验证,该字段仅在某些条件下显示。我怎么能这样做?
我使用了以下内容,但它仍然希望验证该隐藏字段的必填字段。
$('#registerForm').validate({ ignore: ":not(:visible)" });
答案 0 :(得分:14)
通过@Josiah的一些有用提示,我能够达到我的要求。
添加RequiredIfAttribute类和所需的javascript。请参阅Conditional Validation in ASP.NET MVC 3
在课堂上添加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的answer
答案 1 :(得分:7)
我会创建一个有条件的必需属性。有一篇关于用jQuery验证here创建一篇文章的好文章。
另一种选择:您可以引用提供此功能的Foolproof validation (codeplex)项目和客户端脚本。
此外,您可以使用ajax加载部分视图,以便隐藏时它们永远不会出现在页面上。这样可以完全避免条件验证。
答案 2 :(得分:1)
尝试我的自定义validation attribute:
[ConditionalRequired("hFirstName==true")]
public string FirstName {get, set};
它支持多种条件。
答案 3 :(得分:0)
有点晚了,
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;
}
}
}
但这是我的解决方案。
只是必需的继承,它将以相同的方式行事,但只有当字段包含在已发布的密钥中时才会激活。