gpt4 book ai didi

asp.net-mvc - 有效避免 ASP.NET MVC 中的 ViewBag

转载 作者:行者123 更新时间:2023-12-04 17:36:57 24 4
gpt4 key购买 nike

您如何处理避免 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com