【发布时间】:2013-03-12 20:39:00
【问题描述】:
您如何处理避免 ViewBag 的问题,因为它存在动态出错的风险,但也避免每次都必须填充新的 ViewModel 并将其传递回视图。例如,我不想更改以下内容以公开通常填充在 ViewBag 中的常见数据。
[HttpGet]
void Index()
{
return View();
}
到
[HttpGet]
void Index()
{
var messages = new MessageCollection();
messages.AddError("Uh oh!");
return View(messages);
}
我应该在管道中的什么位置添加一个像 ViewBag 这样的自定义且强类型的属性,但它会优雅地暴露在 Controller 和 View 中。当我不需要特定的 ViewModel 时,我宁愿这样做......
[HttpGet]
void Index()
{
Messages.AddError("Uh oh!");
return View();
}
在视图方面,而不是@((IMessageCollection)ViewBag.Messages).Errors id 而是具有类似@Messages.Errors 的东西,它是强类型的并且随处可用。另外,我不想只是将它投射到我的 Razor 视图顶部的代码块中。
在 WebForms 中,我会做一些事情,比如把它作为一个基本页面,然后有一个用户控件,可以根据需要在页面上隐藏或显示。控制器与视图分离后,我不确定如何复制类似的行为。
这可能吗?或者最好的设计方法是什么?
谢谢, 斯科特
【问题讨论】:
-
你真的有两个选择:ViewBag 和模型中的专用属性
标签: asp.net-mvc architecture viewmodel viewbag