要向视图发送错误消息,建议使用哪一个?使用ViewBag还是TempData?

时间:2011-03-22 02:52:16

标签: asp.net asp.net-mvc asp.net-mvc-3

控制器:

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>

问题:

要将数据发送到视图,建议使用哪一个?使用ViewBag或TempData?

1 个答案:

答案 0 :(得分:3)

取决于您的网页工作流程。如果您使用Post-Redirect-Get模式,则必须使用TempData,因为重定向后ViewBag将不可用。

我个人每个视图只使用一个模型,如果需要显示错误,我会将值注入到ModelState中。这就是ModelState的用途。