我在ASP中使用[Required]
属性进行客户端验证。. NET MVC 3.
类如下:
public class User
{
[Required(ErrorMessage = "First Name is required")]
public string FirstName { get; set; }
}
我希望字段FirstName
仅在可见时才被验证,仅在某些条件下才会显示。我该怎么做呢?
我使用了下面的代码,但它仍然会检查隐藏字段的必要字段。
$('#registerForm').validate({ ignore: ":not(:visible)" });
在@Josiah的一些有用的提示下,我能够达到我的要求。
添加RequiredIfAttribute类和所需的javascript。参考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")
将hFirstName
的值设置为"true",如果FirstName字段被隐藏,则设置为"false",如果可见。
这些变化的魔力工作。感谢@Josiah Ruddell的回答
我将创建一个有条件要求的属性。这里有一篇关于使用jQuery创建验证的好文章。
另一个选择:你可以引用一个项目,比如提供此功能的Foolproof validation (codeplex)和客户端脚本。
另外,你可以利用ajax来加载你的部分视图,这样它们在隐藏时就不会出现在页面上。这将完全避免条件验证。
试试我的自定义验证属性:
[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;
}
}
}
但这是我的解决方案。
只是Required的继承,其作用相同,只是它只会在字段包含在发布的键中时激活。