0

Html.ValidationSummary()ビューで一般的なエラーメッセージを表示するために使用したい状況が表示されます。たぶん、何か"There was a problem with the information you entered."がうまくいかなかったすべてのリストを取得することなく(DataAnnotationsによる)。

補足:私はif(ViewContext.ViewData.ModelState.IsValid){ ... }、彼らの見解で使用している人々への言及を見つけましValidationSummaryた。控えめに言っても、私はそのアプローチにあまり感心していません。

ModelStateDictionary検証エラーが発生した各モデル要素のキーがまだ含まれていることが重要です(これによりHtml.EditorFor、他は正しいcssクラスを記述できます)。

私が最終的に機能しているように見えるのは、次のとおりです。

public static class ModelStateHelpers
{
    public static void Empty(this ModelStateDictionary @this)
    {
        foreach (KeyValuePair<string, ModelState> state in @this)
        {
            if (state.Value.Errors.Any())
            {
                state.Value.Errors.Clear();
                state.Value.Errors.Add(String.Empty);
            }
        }
    }
}

私のクラスでこれが続きます:

if (StuffWentWrong) {
    this.ModelState.Empty();
    this.ModelState.AddModelError("", "Something went wrong...");
}

意図したとおり、はエラーメッセージが空白の辞書のHtml.ValidationSummaryhtml構造を抑制するのに十分賢いです。ModelStatesまた、次のようなエラー検証属性で装飾されたテキストフィールドになります。<input class="input-validation-error text-box single-line" data-val="true" data-val-required="The User Name field is required." id="UserName" name="UserName" type="text" value="" />

この特定の解決策は悪臭がしますか?

4

1 に答える 1

1

私は if(ViewContext.ViewData.ModelState.IsValid){ ... }、彼らの見解で使用し、前述のValidationSummary全体を使用している人々への言及を見つけました。控えめに言っても、私はそのアプローチにあまり感心していません。

なぜだめですか?これは合理的な解決策だと思います。ビューの懸念事項である検証の概要を表示するための特別なユースケースが必要だと言います。これを達成するために、コントローラーで何かを操作したり、フレームワークと戦ったりする必要はありません。

ヘルパークラス+メソッドを使用した現在のソリューションかどうかについては、かみそりからstaticチェックするよりも臭いが悪いと思います。のソースコードをダウンロードして、ニーズに合わせてツールを変更することを検討する必要があるViewContext.ViewData.ModelState.IsValidとコメントしました。これは、おそらくあなたの質問に対する最良の答えです。基本的に、前述のステートメントをカスタムにValidationSummary HtmlHelperカプセル化できます。これは、ビューに関するコードを配置するのに適した場所です。ifHtmlHelper

于 2012-07-22T09:25:24.080 に答える