ViewBag的重点是什么?

Pin*_*nch 5 asp.net-mvc viewbag

在理想的"hello world"中,应该将强类型模型传递回视图.

return View(MyModel);
Run Code Online (Sandbox Code Playgroud)

如果事情变得棘手,我们可以创建一个

视图模型

return View(MyViewModel);
Run Code Online (Sandbox Code Playgroud)

恩.

MyViewModel

  1. 为MyModel

我可以避免创建整个ViewModel

并部分使用ViewBag.

ViewBag.Foo = Foo;
return View(MyModel);
Run Code Online (Sandbox Code Playgroud)

我意识到我会丢失一些强类型的功能

(例如Intellisense)

在我的ViewBag视图中.

这种做法是不是很草率?反对MVC代表什么?

如果是这样,ViewBag真正的意义何在?

usr*_*usr 5

我所知道的最有用的用例是带外数据,例如可能在每个页面上显示的消息.动作过滤器可以有条件地将该消息添加到ViewBag.您可能不希望修改每个视图模型类以保存该无关消息,因为它可能是一个跨领域的问题.这种消息/小部件的一个例子是Stack Overflows中断公告.

我不建议使用ViewBag 而不是视图模型.模型类方法具有典型的静态类型优势,而且编写类的成本很低.