其他分享
首页 > 其他分享> > 可以重用数据注释吗?

可以重用数据注释吗?

作者:互联网

有没有一种方法可以在类内部实现数据域(在属性级别)的想法,该类在ASP.Net MVC 4的视图中用作模型?

考虑以下代码:

public class LoginProfileModel {

    [DisplayName("Login ID")]
    [Required(ErrorMessage = "Login ID is required.")]
    public string LogonID { get; set; }

    [DisplayName("Password")]
    [Required(ErrorMessage = "Password cannot be blank.")]
    [StringLength(20, MinimumLength = 3)]
    [DataType(DataType.Password)]
    public string Password { get; set; }
}

这是ASP.Net MVC 4中的LoginProfileModel.它使用各种元数据/数据注释,以便可以使用以下代码创建干净的视图:

@model myWebSite.Areas.People.Models.LoginProfileModel

@using ( Html.BeginForm( "Index" , "Login" ) ) {
    @Html.ValidationSummary()
    @Html.EditorForModel()
    <input type="submit" value="Login" />
}

我在多个视图中使用了“登录ID”和“密码”的想法,因此在多个视图模型中都使用了这种概念.我希望能够定义一个密码使用的属性,或者可能在一个位置定义密码本身及其所有数据注释,以便我可以在需要时重用所有这些定义,而不是每次使用它们时都重新指定它们:

    [DisplayName("Password")]
    [Required(ErrorMessage = "Password cannot be blank.")]
    [StringLength(20, MinimumLength = 3)]
    [DataType(DataType.Password)]
    public string Password { get; set; }

有可能吗?

解决方法:

以下属性会影响View的验证过程.

[Required(ErrorMessage = "Password cannot be blank.")]
[StringLength(20, MinimumLength = 3)]

对于Validation属性,您可以创建这样的类:

public class PasswordRuleAttribute : ValidationAttribute
    {    
        public override bool IsValid(object value)
        {

            if (new RequiredAttribute { ErrorMessage = "Password cannot be blank." }.IsValid(value) && new StringLengthAttribute(20) { MinimumLength=3 }.IsValid(value) )
                return true;

            return false;
        }
    }

您可以按以下方式使用它:

[PasswordRule]
public string Password{get;set;}

您提到的其他两个属性是直接从Attribute类派生的,我认为没有办法将它们合并为一个属性.

我将尽快为您进行修改.

所以现在我们剩下了:

[DisplayName("Password")]
[DataType(DataType.Password)]
[PasswordRule]
public string Password{get;set;}

编辑:

根据这篇文章:Composite Attribute,不可能合并属性.

标签:viewmodel,data-annotations,code-reuse,c,asp-net-mvc
来源: https://codeday.me/bug/20191030/1966408.html