1

我有一个看起来像这样的 MVC 模型类:

[ValidateNewRegistration]
public class NewRegistrationModel {

    [System.ComponentModel.DisplayName("Profile Display Name")]
    [Required(ErrorMessage = "Display Name must be specified.")]
    [StringLength(50)]
    public string DisplayName { get; set; }

    [System.ComponentModel.DisplayName("Email Address")]
    [Required(ErrorMessage = "Email address must be specified.")]
    [RegularExpression("^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$",
              ErrorMessage = "The email address you specified is invalid.")]
    [StringLength(100)]
    public string EmailAddress1 { get; set; }

}

在我看来,我有这个:

    @Html.ValidationSummary()
    @Html.EditorForModel()

我了解如何使用元数据来标记属性,但我想做的是实现我自己的编辑器模板,其中有两个字段......名字和姓氏,将在至少 1/2 中使用我的网站上有十几个地方。

如何添加错误消息,以便它们出现在验证摘要中,但以包含在 EditorTemplate 中的方式出现?

从长远来看,我正在寻找的是能够将“[UIHint(”--Editor Template--“)]”放入类中,并使编辑器模板自包含足以发出它的onw错误消息的形式场地。这样我就不必将元数据添加到显示 [Required...] 或 [RegularExpression...] 的类中。我的最终目标是一个看起来像这样的类:

[ValidateNewRegistration]
public class NewRegistrationModel {

    [System.ComponentModel.DisplayName("Profile Display Name")]
    [UIHint("DisplayName")]
    public string DisplayName { get; set; }

    [System.ComponentModel.DisplayName("Email Address")]
    [UIHint("EmailAddress")]
    public string EmailAddress1 { get; set; }

    [System.ComponentModel.DisplayName("Email Address (confirm)")]
    [UIHint("EmailAddress")]
    public string EmailAddress2 { get; set; }

}
4

1 回答 1

0

这里已经提出了一个类似的问题:有没有办法重用数据注释?

如果您需要任何特定的帮助,请检查那里的解决方案并发表评论

    class UIHintAttribute : ValidationAttribute
{
    public string Field { get; set; }

    public UIHintAttribute(string field)
    {
        Field = field;
    }
    public override bool IsValid(object value)
    {

        if (Field == "DisplayName")
        {
            if (new RequiredAttribute { ErrorMessage = "DisplayName cannot be blank." }.IsValid(value) && new StringLengthAttribute(50).IsValid(value))
                return true;

            return false;
        }
        if (Field == "EmailAddress")
        {
            if (new RequiredAttribute { ErrorMessage = "Email address cannot be blank." }.IsValid(value)
                && new RegularExpressionAttribute("^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$") { ErrorMessage = "The email address you specified is invalid." }.IsValid(value)
                    && new StringLengthAttribute(100).IsValid(value))
                return true;

            return false;
        }

        // Needs to return true by default unless Required exists
        return true;
    }
}

现在你应该可以按照你想要的方式使用它了。

编辑:

从长远来看,我正在寻找的是能够将“[UIHint(”--Editor Template--“)]”放入类中,并使编辑器模板自包含足以发出它的onw错误消息的形式场地。这样我就不必将元数据添加到显示 [Required...] 或 [RegularExpression...] 的类中。

上面的类将使以下成为可能:

public class NewRegistrationModel {

    [System.ComponentModel.DisplayName("Profile Display Name")]
    [UIHint("DisplayName")]
    public string DisplayName { get; set; }

    [System.ComponentModel.DisplayName("Email Address")]
    [UIHint("EmailAddress")]
    public string EmailAddress1 { get; set; }

    [System.ComponentModel.DisplayName("Email Address (confirm)")]
    [UIHint("EmailAddress")]
    public string EmailAddress2 { get; set; }

}
于 2013-11-05T05:10:07.250 回答