Asp.net mvc ViewBag的真正目的是什么?

Asp.net mvc ViewBag的真正目的是什么?,asp.net-mvc,viewbag,Asp.net Mvc,Viewbag,在理想的“hello world”中,应该将强类型模型传递回视图 如果事情变得棘手,我们可以创建一个 视图模型 前 MyViewModel 我的模型 福 我可以避免创建整个ViewModel 部分使用可视包 我意识到我将丢失一些强类型功能 (例如智能感知) 在我看来,这是一个取景袋 这种做法是否草率?MVC代表什么 如果是这样,ViewBag的真正意义是什么?据我所知,最有用的用例是带外数据,如可能在每个页面上显示的消息。动作过滤器可以有条件地将该消息添加到ViewBag中。您可能不想修改每个视

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

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

视图模型

MyViewModel

  • 我的模型
  • 我可以避免创建整个ViewModel

    部分使用可视包

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

    (例如智能感知)

    在我看来,这是一个取景袋

    这种做法是否草率?MVC代表什么


    如果是这样,ViewBag的真正意义是什么?

    据我所知,最有用的用例是带外数据,如可能在每个页面上显示的消息。动作过滤器可以有条件地将该消息添加到ViewBag中。您可能不想修改每个视图模型类来保存不相关的消息,因为它可能是一个交叉关注点。此类消息/小部件的一个示例是堆栈溢出停机通知


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

    这是一个好问题,就个人而言,我并不认为这有什么意义——它所做的只是鼓励“懒惰”编码
    dynamic
    对象有其用途,但是,我不认为
    ViewBag
    是其中之一,我更愿意使用
    ViewData[]
    /
    ViewModel
    并在其中设置我的类型安全性,尤其是当我知道我要处理的类型时。

    我还没有遇到过这样一种情况,即使用ViewBag比使用其他视图(结构正确的视图模型)更有益。其他一些答案提到将其用于需要在每个页面上显示的数据块。在此场景中,您应该创建一个基础ViewModel类,所有ViewModel都从该类继承。我使用这个结构来存储登录的用户,等等


    在我看来,ViewBag有一个目的:在编写最少代码的同时,让ASP.NET MVC的产品演示变得简单快捷。这不是构造代码的最佳方式,但它可以销售产品。

    非常有趣,现在有意义了。谢谢我以前从未见过
    堆栈溢出停机
    :)您不记得周四Oc 10发生在12:02:00:01AM-12:02:00:02AM的著名SO停机吗@MuraliI认为这是我们的代理服务器的延迟。但是我看不到这条消息,因为页面本身没有加载:(他们在维护数据库时有时会宣布短的只读周期。这是因为您忘记在视图模型中放置的内容;-)viewdata实际上不再是类型安全的
    return View(MyModel);
    
    return View(MyViewModel);
    
    ViewBag.Foo = Foo;
    return View(MyModel);