3

これを行う方法に興味があります.フォーラムとコントローラーからビューへの通常のビューのカスタムエラーメッセージを送信したい(したがって、両方の例を探しています)。ModelState.AddError()フロントエンドのdivでラップできるエラーメッセージの外観を制御しようとしている方法を見てき ました。

何か案は?

私はASP.netに非常に慣れていないため、これに関するチュートリアルは非常に混乱しているようです。したがって、何をすべきかわからないため、表示するコードは実際にはありません。

4

2 に答える 2

6

ビューのエラー メッセージをカスタマイズしようとしていると思います。追加したものを含むエラー メッセージはModelState.AddModelError("", "error message")、3 つの方法でカスタマイズできます。

オプション1

クラスHtml.ValidationSummary()を介してその外観を使用およびカスタマイズします。validation-summary-errorsVS の既定の mvc プロジェクト テンプレートには、既定でそのクラスが含まれます。デフォルトの色は赤です(と思います)。ただし、そのクラスを変更することで、エラーの概要のすべての側面を実質的に制御できます。

.validation-summary-errors {
    border: 5px solid red; // thick red border
    color: #3904D9; // dark blue
    font-size: 1.5em; // quite big fonts
    font-weight: bold;
}

オプション 2

ValidationSummaryメッセージを順序なしリスト ( li) に出力します。プロジェクトでエラー メッセージを表示する別の方法が必要な場合は、ViewDataDictionary. 次のコードは、細い赤い境界線を持つ個別の div にエラー メッセージを書き込みます。サンプルをシンプルにするために、スタイルはインラインで記述されています。

@foreach (var item in ViewData.ModelState) {
    if (item.Value.Errors.Any()) {
        foreach (ModelError e in item.Value.Errors) {
            <div style="border: 1px solid red;margin-bottom:5px;">
                @e.ErrorMessage</div>
        }
    }
}

オプション 3

ビューにロジックを配置したくない場合は、htmlhelper を拡張 (またはカスタム ヘルパーを作成) できます。基本的に、カスタム htmlhelper のオプション 2 に示されているのと同じロジックを使用します。

public static class HtmlExtensions {
    public static MvcHtmlString CustomValidationSummary(this HtmlHelper helper)
    {
        var html = string.Empty;
        foreach (var item in helper.ViewData.ModelState)
        {
            if (item.Value.Errors.Any()) {
                foreach (ModelError e in item.Value.Errors) {
                    html 
                      += "<div style='border: 1px solid red;margin-bottom:5px;'>" 
                      + e.ErrorMessage 
                      + "</div>";
                }
            }
        }

        return MvcHtmlString.Create(html);
    }
}

そして、あなたが使用するのと同じ方法でそれを使用しますValidationSummary:

@Html.CustomValidationSummary()
于 2013-04-24T17:17:10.637 に答える
2

オブジェクトを調べたい場合がありViewBagます。コントローラーで設定ViewBag.ErrorMessageすると、ビューで文字列として使用できるようになります。実際、ErrorMessage だけでなく、好きな名前を付けることができます。

これを追加し、ビューにロジックを含めて、適切な場合にのみ表示し!string.IsNullOrEmpty(ViewBag.ErrorMessage)ます。

これは、複数の方法のうちの 1 つにすぎません。ViewBagは単なるラッパーなViewDataので、行き詰まっている場合は、そのオブジェクトも調べてください。

この回答は完全に包括的ではありませんが、出発点になることを願っています。

頑張ってください!!

于 2013-04-24T16:28:47.357 に答える