仅在字段可见时才需要验证

时间:2011-04-20 14:17:17

标签: jquery asp.net-mvc-3 jquery-validate requiredfieldvalidator client-side-validation

我在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)" });

4 个答案:

答案 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;
        }
    }
}

但这是我的解决方案。

只是必需的继承,它将以相同的方式行事,但只有当字段包含在已发布的密钥中时才会激活。