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



我在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的继承,其作用相同,只是它只会在字段包含在发布的键中时激活。

相关内容

  • 没有找到相关文章

最新更新