0

ビューモデルの1つのプロパティで2つのリモート検証属性を使用することは可能ですか?

私ができるようにしたいのは、2つのチェックを実行することです。1つは特定のユーザーIDがDBに存在すること、もう1つはユーザーがシステムにアカウントをまだ設定していないことです。

両方のテストを含むカスタム属性をいつでも作成できると思いますが、可能であれば、すぐに使用できる機能を使用して、検証をチェーン化することをお勧めします。

検証がどのように失敗するかに応じて異なるエラーメッセージを表示する必要があり、検証結果とともにエラーメッセージを返すことができないため、ロジックを1つのJsonResultに実際に組み合わせることができません。

4

2 に答える 2

1

「すぐに使える機能」に関して何を期待しているのかわかりませんが、2つの属性を簡単に作成できます。MVC 3では、メソッドからモデルを派生させてIValidatableObject実装する機会もありますValidate。後者は、必要に応じて、相互のコンテキスト内で複数のプロパティに対して複数の検証を実行する機能を提供します。

ValidationAttributeを実装し、プロパティを装飾する方法は次のとおりです。これらのうち2つが必要になるので、これに名前を付けて、同じメソッドのオーバーライドUsernameExistsAttributeと呼ばれる別の1つを作成したふりをします。AccountAlreadySetupAttributeIdValid

public class UsernameExistsAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        if((string)value == "Bob")
            return false;
        else
            return true;
    }
}

そして、ビューモデルでは、次のように属性を装飾します。

public class FreakinSweetViewModel
{
    [UsernameExists(ErrorMessage="Username exists")]
    [AccountAlreadySetup(ErrorMessage="Account is not setup")]
    public string Username { get; set; }
}

これにより、MVC3ボックスからクライアント側とサーバー側の検証が接続されます。

于 2011-08-19T17:44:41.043 に答える
1

実際には、MVC3リモート検証を使用して特有のエラーメッセージを返すことができます。たとえば、http://msdn.microsoft.com/en-us/library/gg508808 (v = vs.98).aspxまたはhttp://deanhume.com/Home/BlogPost/mvc-3-and-を参照してください。リモート検証/51

于 2011-08-19T19:12:21.213 に答える