When to use ViewBag, ViewData, or TempData in Mvc3

2019-01-24 05:19发布

问题:

When to use ViewBag, ViewData, or TempData in view. In the controller i want to send object to the view.I want to know that which will be best in this case. I want the object in the view page.

回答1:

Use TempData when you need data to be available for the next request, only.

TempData["myInfo"] = "my info";

Then in the next request, it will be there... but will be gone after that.

Use ViewBag for most of your extra-data needs to pass to your view, beyond the @model

ViewBag.MyInfo = "my info";

Then access it from your view.

Use ViewData to access/enter the exact same info as ViewBag, except as a collection instead of properties of a dynamic object.

ViewData["MyInfo"]

accesses exactly the same data as ViewBag.MyInfo

Note that I used strings, but these can store any object you wish.

Another thing to note: TempData and ViewData are both dictionaries that store object values, so you must cast those to their original type when you use them. ViewBag however uses dynamic, and you don't always need to cast that, since it is done at runtime. Some methods (like Extension methods) can not handle dynamic though, so you would need to cast in those cases.



回答2:

IMHO for decent design practies -

ViewBag = never. ViewData = never. These are magic string-ish based fields and canot be caught during any compile time instances either.

Your VieWModel should contain everything it needs. Thats it's purpose in life. Don't devoid it of its purpose. TempData for status messages only or object you don't want to cache but wan't available for the very next request only.