12

私は現在、リストを表すビューに表示する必要があるデータのリストを作成しており、アイテムごとに、編集や削除など、実行できる対応するアクションを表示しています。エディションについては、それが特定のビューであることを認めても問題ありません。私の問題は、アイテムを削除したいときです。投稿方法には2つの選択肢があります。

 //Call directly the list 
 [HttpPost]
 [Authorize]
 public ActionResult Delete(int itemId)
 {
     // logic to delete an item
     ViewBag.Error = ""; // The result of the execution
     return List(); 
 }

この解決策の問題点は、URL が最初のものと同じではなくなったことです: .../List、それは .../Delete です。この解決策は素晴らしいとは思いません。他の解決策は、にリダイレクトすることです。アクション、これで URL は適切になりましたが、viewBag のエラー メッセージは表示されなくなりました。

4

3 に答える 3

36

を使用TempDataして、1 つの要求全体で情報を保持できます。これは、まさにこのユース ケースを対象としています。代わりに使用するのではなく使用しViewBagますTempData["Error"] = "";。次に、受信側では、次のようなスニペットがあります。

[HttpGet]
public ActionResult List() {
    ViewBag.Error = TempData["Error"];
    // ...
    return View();
}

ASP.NET TempData はリクエスト間で永続され、ASP.Net MVC 3 で ViewBag、ViewData、または TempData を使用する場合を参照してください。

于 2012-04-12T13:17:32.690 に答える
13

リダイレクトを行っている場合は、TempData代わりに を使用してみてくださいViewBag。TempData は、次のページ要求までユーザーのセッションでキー/値を保持するディクショナリです。コントローラーで:

TempData["Error"] = "A message goes here";

リダイレクト先のリスト ビューで:

@TempData["Error"]

または、かみそりを使用していない場合:

<%= TempData["Error"] %>
于 2012-04-12T13:16:28.150 に答える