您如何处理避免 ViewBag 的问题,因为它有动态出错的风险,但也避免每次都必须填充新的 ViewModel 并将其传递回 View 。例如,我不想更改以下内容以公开通常填充在 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();
}
在 View 方面,而不是 @((IMessageCollection)ViewBag.Messages).Errors id 而是具有类似 @Messages.Errors 的东西,它是强类型的并且随处可用。此外,我不想只是将它转换到我的 Razor View 顶部的代码块中。
在 WebForms 中,我会做一些事情,比如把它作为一个基本页面,然后有一个用户控件,可以根据需要在页面上隐藏或显示。 Controller 与 View 分离后,我不确定如何复制类似的行为。
这是可能的还是最好的设计方法是什么?
谢谢,
斯科特
最佳答案
Razor View 相当简单。您与单个模型进行交互,该模型是强类型的。那么,任何你想在 View 中强类型化的东西都需要在你的模型上。如果您的模型上有一些您不想要的东西或者是一次性的,那么 ViewBag
作为所有非模型数据的通用包罗万象提供,这就是为什么它是动态的。强类型会限制它成为一个包罗万象的能力。
简短而简单:如果您想要强类型的消息添加到您的 View 模型。否则,请坚持使用 ViewBag
.这些是你的选择。
关于asp.net-mvc - 有效避免 ASP.NET MVC 中的 ViewBag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15579673/