1

MVC 用の twitter ブートストラップ nuget パッケージを使用しています。

ただし、コントローラーに投稿してエラーをチェックするときに、モデルに複数のエラーがある場合、TempData に 2 つ目のアラートを追加しようとすると、次のエラーが発生します。

An item with the same key has already been added.

    //
    // POST: /Customer/Create
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Customer customer)
    {
        var errors = ModelState.Values.SelectMany(v => v.Errors);
        if (ModelState.IsValid)
        {
            // save to database etc
            // redirect to action
        }
        foreach (var c in errors)
        {
            TempData.Add(Alerts.ERROR, c.ErrorMessage);  // Error is reported here
        }

以下に示すように、エラー メッセージは異なります。 ss

Alerts.Error2 つのエラー メッセージを追加する方法はありTempDataますか? または、文字列を連結し、エラー メッセージを組み合わせて 1 つのエラーを追加する必要がありますか?

TempData コードを次のように変更した場合:

TempData.Add(Alerts.ERROR, errors.Select(c => c.ErrorMessage).ToArray());

...ビューは次のようにレンダリングされます。

ss2

ありがとうございました、

マーク

4

2 に答える 2

1

TempDataは辞書であるため、重複するキーを追加しようとすると例外が発生することは理にかなっています。の内容を表示する方法に応じてTempData、エラー メッセージを 1 つの文字列に連結するか、または がGuid追加されたキーを使用します (これにより、毎回キーが一意になります)。

考えられる回避策の 1 つ (ループ内):

if (TempData.ContainsKey(Alerts.ERROR))
{
    string temp = TempData[Alerts.ERROR].ToString();
    TempData[Alerts.ERROR] = string.Concat(temp, c.ErrorMessage);
}
else
{
    TempData.Add(Alerts.ERROR, c.ErrorMessage);
}

これは単純に、エラー メッセージを以前にフォーマットしたことがあると仮定しており、1 つの長い文字列を生成します。たとえば<ul>、エラーを表示するために a を使用している場合、各エラー メッセージを で<li></li>囲み、次に連結します。

于 2013-06-03T20:18:41.193 に答える
1

TempData.Add(Alerts.ERROR, errors.Select(c => c.ErrorMessage).ToArray())ビューのエラーを使用して反復処理しないのはなぜですか?

于 2013-06-03T19:40:04.920 に答える