2011-03-22 2 views
0

コントローラー:ビューにエラーメッセージを送信するには、どちらをお勧めしますか? ViewBagまたはTempDataの使用

namespace MvcMusicStore.Controllers 
{ 
    public class StoreController : Controller 
    { 
     MusicStoreEntities db = new MusicStoreEntities(); 

     public ActionResult Index() 
     { 
      var genres = db.Genres.ToList(); 
      return View(genres); 
     } 

     public ActionResult Browse(string genre) 
     { 
      var g = db 
        .Genres 
        .Include("Albums") 
        .FirstOrDefault(x => x.Name == genre); 

      if (g == null) 
      { 
       ViewBag.ErrorMessage = string.Format("Genre: {0} does not exist.", genre); 
       TempData["ErrorMessage"] = string.Format("Genre: {0} does not exist.", genre); 
       return View("Error"); 
      } 

      return View(g); 
     } 

     public ActionResult Details(int id) 
     { 
      return View(); 
     } 
    } 
} 

ビュー:

@model System.Web.Mvc.HandleErrorInfo 
@{ 
    ViewBag.Title = "Error"; 
} 
<h2> 
    ViewBag.ErrorMessage: @ViewBag.ErrorMessage 
</h2> 
<h2> 
    TempData["ErrorMessage"]: @TempData["ErrorMessage"] 
</h2> 

質問:

1が推奨されるビューにデータを送信するには? ViewBagまたはTempDataの使用

答えて

3

ページワークフローの内容によって異なります。 Post-Redirect-Getパターンを使用している場合は、リダイレクト後にViewBagを使用できないため、TempDataを使用する必要があります。

私は1つのビューにつき1つのモデルしか使用しません。エラーを表示する必要がある場合、代わりにModelStateに値を注入します。これがModelStateの目的です。

関連する問題