4

私はValidation.Add()Html.TextBox()(および関連する) ヘルパーを目立たない JavaScript エラー チェックと組み合わせて使用​​しており、その結果に非常に満足しています。サーバー側とクライアント側を 1 セットのコードでカバーし、通常、必要なすべてを達成できました。

エラーケースを確立するために独自のロジックを実行する必要がある場合があるという点で、私は少し問題を抱えています。このエラーがフィールドに直接関連している場合は、任意のエラー メッセージを使用してエラーの原因としてそのフィールドに手動でフラグを付けるとよいでしょう。意味を明確にするために、例として、ユーザー名が既に使用されているかどうかを確認する必要があるユーザー名のフィールドがあります。使用されている場合は、エラーが生成されます。

現時点では、 を使用してフォーム エラー コレクションに追加してValidation.AddFormError()いますが、これは機能しますが、エラーは概要にのみ表示されます。上記の例では、エラーは明らかにユーザー名フィールドに関連しているため、そのエラーを適切なフィールド名に結び付ける (そして適切な場所に表示する) ことが論理的に考えられます。

から派生しRequestFieldValidatorBaseて、にのみ戻るバリデーターを作成するfalse必要がありますIsValid()か? data-明らかに、サーバー側のチェックであるため、クライアント側でチェックすることは期待していませんが、より具体的なバリデーターと検証システム用のプラグインを作成し、より多くの属性を公開し、AJAX を実行することで可能になることはわかっています。小切手。この質問で私が興味を持っているのは、特定のフィールドをサーバー側エラーのソースとしてマークする、より一般的な目的のソリューションです。

うまくいけば、それは理にかなっています。この問題への最良のアプローチとして、人々は何を推奨しますか?

4

2 に答える 2

0

他の人の助けになるか、誰かが改善を提案できる場合に備えて、戻ってきて、最後に実装したものを投稿すると思いました。

名前を付けたカスタムバリデーターを追加しましThrowApp_Code

public class Throw : RequestFieldValidatorBase
{
    public Throw(string errorMessage)
        : base(errorMessage)
    { }

    protected override bool IsValid(System.Web.HttpContextBase httpContext, string value)
    {
        return false;
    }
}

次に、組み込みのバリデーターが機能するのと同じ方法でそれらのインスタンスをインラインで作成できるように、初期化メソッドを追加しました (これも に追加されましたApp_Code)。

public static class CustomValidator
{
    public static Throw Throw(string errorMessage)
    {
        return new Throw(errorMessage);
    }
}

次に、コンテンツ ページで次のようなことができます。

if (!usernameIsValid)
{
    Validation.Add("username", CustomValidator.Throw("That username is already taken."));
}
于 2013-11-08T09:05:33.153 に答える