3

私はモデル ビュー コントローラー構造を持つ Razor アプリケーションで作業しています。何かを編集してから、リダイレクトを使用してルーティングし、インデックス ページに戻りますが、エラーも文字列のリストとして渡そうとします。

私はこのようなものを持っています:

var errorMessages = new List<string>();
{...}
return RedirectToRoute("Default", new { controller = "Controller", action = "Action",  errorMessages = errorMessages });

そして、これは私の他のコントローラーメソッドがどのように見えるかです:

public ActionResult Action(List<string> errorMessages)
{
...
}

問題は、私の最初のコントローラーで何が起こっても、Actionメソッドで常に を読み取る1つの要素を持つコレクションを取得することです"System.Collections.Generic.List'1[System.String]"。私は実際のコレクションを受け取ることを期待しています。

なぜこれが起こるのですか?またはそれを解決する方法は?

4

2 に答える 2

3

RouteValueDictionary項目のリストを入力する必要があります。今、あなたがしているerrorMessagesのは type の名前に設定することだけですList<string>

これを修正するにRouteValueDictionaryは、デフォルトのモデル バインダーが想定する形式で確実に入力する必要があります。つまり、コレクションにバインドするには、次の形式でアイテムのリストを渡す必要があります。

errorMessages[0]
errorMessages[1]
...
errorMessages[n]

これが必要な理由については、Phil Haack のブログ記事Model Binding To A List を参照してください。これを行う方法を示す簡単な例を次に示します。

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var errorMessages = new List<string>() { "test", "test2" };

        RouteValueDictionary rvd = new RouteValueDictionary()
        {
            { "controller", "home" },
            { "action", "action" }
        };

        for (int i = 0; i < errorMessages.Count; i++)
            rvd["errorMessages[" + i + "]"] = errorMessages[i];

        return RedirectToRoute("Default", rvd);
    }

    public ActionResult Action(List<string> errorMessages)
    {
        // Do stuff

        return View();
    }
}

errorMessagesパラメータにはとのAction値が含まれます。testtest2

于 2012-08-09T13:26:19.380 に答える
1

使用できますTempData

アクション メソッドでは、メッセージをTempData

var errorMessages = new List<string>();
{...}
TempData["Errors"] = errorMessages;
return RedirectToRoute("Default", new { controller = "Controller", action = "Action" });

そして、Razorビューページまたはアクションで取得できます

@{
    var errorMessages = TempData["Errors"] as List<string>;
}

<ul>
@foreach(var errorMessage in errorMessages ){
    <li>@errorMessage</li>
}
</ul>

ここでそれについて読んでくださいhttp://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

于 2012-08-09T13:18:16.140 に答える