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()

メタデータを使用して属性をマークアップする方法は理解していますが、やりたいのは、2 つのフィールドを持つ独自のエディター テンプレートを実装することです...少なくとも 1/2 で使用される名と姓です。私のウェブサイトの数十の場所。

エラー メッセージを追加して Validation Summary に表示されるようにする方法を教えてください。

長期的に私が探しているのは、「[UIHint("--Editor Template--")]」をクラスに配置し、エディター テンプレートを十分に自己完結させて、フォームのエラー メッセージを発行する機能です。分野。[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--")]」をクラスに配置し、エディター テンプレートを十分に自己完結させて、フォームのエラー メッセージを発行する機能です。分野。[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 に答える