24

[Required]在 ASP.NET MVC 3 中使用该属性进行客户端验证。

该类看起来像:

public class User
{
    [Required(ErrorMessage = "First Name is required")]
    public string FirstName { get; set; }
}

我希望该字段FirstName仅在可见时才被验证,该字段仅在某些条件下显示。我怎样才能做到这一点?

我使用了以下内容,但它仍然希望验证该隐藏字段的必填字段。

$('#registerForm').validate({ ignore: ":not(:visible)" });
4

4 回答 4

14

借助@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")

如果 FirstName 字段隐藏,则将的值设置hFirstName为“true”,如果可见,则将其设置为“false”。

魔法适用于这些变化。感谢@Josiah Ruddell 的回答

于 2011-04-21T13:07:27.727 回答
7

我会创建一个有条件的必需属性。这里有一篇关于使用 jQuery 验证创建一个的好文章。

另一种选择:您可以参考提供此功能和客户端脚本的Foolproof validation (codeplex)之类的项目。

此外,您可以利用 ajax 来加载部分视图,以便它们在隐藏时永远不会出现在页面上。这将完全避免条件验证。

于 2011-04-20T14:27:23.770 回答
1

试试我的自定义验证属性

[ConditionalRequired("hFirstName==true")]
public string FirstName {get, set};

它支持多种条件。

于 2013-11-16T13:55:32.893 回答
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;
        }
    }
}

但这是我的解决方案。

只是对Required 的继承,它的行为方式相同,只是它仅在该字段包含在发布的键中时才会激活。

于 2018-05-15T22:02:42.097 回答