ViewBag的重点是什么?

时间:2013-10-11 14:18:41

标签: asp.net-mvc viewbag

在一个理想的“你好世界”中。一个人应该将强类型模型传递回视图

return View(MyModel);

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

视图模型

return View(MyViewModel);

离。

MyViewModel

  1. 为MyModel
  2. 我可以避免创建整个 ViewModel

    并部分使用 ViewBag

    ViewBag.Foo = Foo;
    return View(MyModel);
    

    我意识到我将失去一些强类型功能

    (例如Intellisense)

    在我的ViewBag视图中。

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

    如果是这样,ViewBag的重点是什么?

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

这是一个很好的问题,就个人而言,我并不认为有任何意义 - 所有这一切都鼓励“懒惰”编码。 dynamic个对象有其用途,但是,我不认为ViewBag是其中之一,我更愿意使用ViewData[] / ViewModel并获取我的类型 - 安全在那里,特别是当我知道我正在处理的类型时。

答案 2 :(得分:1)

我没有遇到过将ViewBag用于替代方案(正确结构化的视图模型)是有益的。其他一些答案提到将它用于需要在每个页面上显示的数据。在这种情况下,您应该创建一个所有ViewModel继承的基本ViewModel类。我使用这种结构来存储登录用户等。

在我看来,ViewBag有一个目的:在编写最少的代码时,轻松快速地提供ASP.NET MVC的产品演示。它不是构建代码的最佳方式,但它销售产品。