1

タイトルがすべてを物語っていますが、ここで少し背景を追加します。

最近まで、私は MVC の既製のものを使用CompareAttributeして 2 つの値 (この場合はパスワードとその確認) を比較していました。[Display(Name = "Name")]この属性は、比較されるプロパティの属性によって設定された表示名を表示しないことを除いて、うまく機能しています。

比較する 2 つのプロパティを次に示します。

[Required]
[Display(Name = "New Password")]
public string New { get; set; }

[Compare("New")]
[Display(Name = "Confirm Password")]
public string ConfirmPassword { get; set; }

検証メッセージは次のようになります。

'Confirm Password' and 'New' do not match.

これは機能しますが、明らかに本来あるべきほど良くはありません。は、属性で指定されているようにNew読み取られる必要があります。New PasswordDisplay

完全ではありませんが、私はこれを機能させました。次の実装では (何らかの理由で) プロパティの指定された名前を取得できないという問題が修正されていますが、その理由はわかりません。

public class CompareWithDisplayNameAttribute : CompareAttribute
{
    public CompareWithDisplayNameAttribute(string otherProperty)
        : base(otherProperty)
    {
    }
}

現在、これは機能しますが、クライアント側の検証は機能しません。このようなものを使用することを提案する別の質問で回答を受け取りました

DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(CompareWithDisplayName), typeof(CompareAttributeAdapter))

私のGlobal.asaxでは、しかしCompareAttributeAdapter実際には存在しません。

だからここにいます。Displayカスタム属性で属性が適切に使用されていますCompareWithDisplayNameが、クライアント側の検証が完全に欠落しています。

クライアント側の検証をこのソリューションで可能な限りクリーンな方法で機能させるにはどうすればよいですか?

4

1 に答える 1