ViewData是基于字典的强类型集合,需用字符串键和类型转换;ViewBag是其动态封装,通过属性访问更简洁但无编译时检查。两者共享数据且仅限当前请求,常用于传递非核心数据如标题、提示信息等。

C#的
ViewData
ViewBag
ViewData
ViewBag
dynamic
要理解
ViewData
ViewBag
ViewData
ViewData
ViewDataDictionary
Dictionary<string, object>
object
public IActionResult Index()
{
ViewData["Message"] = "欢迎来到我的博客!";
ViewData["PostCount"] = 123;
return View();
}.cshtml
object
<p>@ViewData["Message"]</p> <p>文章总数:@(int)ViewData["PostCount"]</p>
这里需要注意,如果尝试访问一个不存在的键,或者类型转换失败,程序会在运行时抛出异常。
ViewBag
ViewBag
dynamic
ViewData
ViewBag
ViewData
public IActionResult Index()
{
ViewBag.Message = "欢迎来到我的博客!";
ViewBag.PostCount = 123;
return View();
}.cshtml
<p>@ViewBag.Message</p> <p>文章总数:@ViewBag.PostCount</p>
ViewBag
它们的关系
可以这么理解:
ViewBag
ViewData
ViewBag.Foo
ViewData["Foo"]
ViewBag.Foo
ViewData["Foo"]
ViewBag
ViewData
这其实是Web开发中一个很实际的问题。HTTP是无状态的,每次请求都是独立的。当控制器处理完一个请求,准备将数据渲染到视图上时,它需要一种方式把这些处理结果“带”到视图中去。
虽然我们通常会使用强类型模型(Strongly-Typed Models)来传递视图所需的主要数据,但这并不总是万能的。有时候,视图可能需要一些辅助性的、不属于主模型的数据,比如:
为这些零散的数据都去创建一个强类型模型显得过于繁琐和僵化。
ViewData
ViewBag
这个问题,在我看来,更多的是一个风格和团队规范的选择,但也有一些细微的倾向性。
我个人更倾向于使用ViewBag的情况:
ViewBag.Title = "我的主页";
ViewBag
ViewBag
我可能会考虑使用ViewData的情况:
需要传递集合或复杂类型,且希望在视图中进行类型检查: 虽然
ViewBag
ViewData
// Controller
ViewData["Users"] = new List<string> { "Alice", "Bob" };
// View
@{
var users = (List<string>)ViewData["Users"];
foreach (var user in users)
{
<p>@user</p>
}
}这种情况下,显式的转换反而能提供一点点心理上的“安全感”。
当键名是动态生成时: 虽然不常见,但如果你的键名需要在运行时根据某些逻辑动态生成,
ViewData["MyDynamicKey_" + someId]
团队规范: 有些团队可能出于历史原因或对强类型化的偏执,更倾向于使用
ViewData
总结一下我的看法: 对于大多数简单的场景,
ViewBag
ViewData
ViewBag
在使用
ViewData
ViewBag
常见的陷阱:
ViewBag.Titl
@ViewBag.Title
@ViewBag.Title
null
NullReferenceException
ViewData
ViewData["Titl"]
ViewData["Title"]
ViewData
InvalidCastException
ViewData["Count"]
string
(int)ViewData["Count"]
ViewData
ViewBag
ViewBag
@ViewBag.SomeValue
ViewBag
ViewData
ViewData
ViewBag
TempData
性能考量:
ViewBag
dynamic
dynamic
ViewData
ViewBag
总结: 性能方面,你几乎不需要担心
ViewData
ViewBag
ViewBag
ViewData
以上就是C#的ViewData和ViewBag是什么?有什么区别?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号