ViewData 和 ViewBag 是 ASP.NET Core MVC 中控制器向视图临时传值的轻量方式,本质相同、仅限单次请求,适合传少量非结构化数据,但缺乏类型安全和编译检查,推荐优先使用强类型 ViewModel。
ASP.NET Core MVC 中向视图传递数据,最常用、最轻量的方式就是 ViewData 和 ViewBag。它们本质相同,都是控制器向视图“临时传值”的快捷通道,适用于单次请求内的简单数据共享。
ViewData 是一个继承自 IDictionary 的动态字典,键是字符串,值是 object 类型。在控制器中赋值后,视图里必须显式转换类型才能安全使用。
NullReferenceException 或 InvalidCastException
ViewBag 是对 ViewData 的动态封装(底层仍是 ViewData),利用 C# 的 dynamic 特性,允许用点语法访问属性,无需引号和类型转换。
@ViewBag.Titile)不会报错,运行时才为 null;也不支持 IntelliSense 提示ViewData 和 ViewBag 都只在当前请求生命周期内有效,下一次请求就清空。适合传少量、非结构化、一次性的数据,比如页面标题、提示消息、开关标志等。
不能传复杂模型对象(建议用 ViewData.Model 或直接 return View(model))@if (ViewBag.IsAdmin) { ... }
ViewData 和 ViewBag 底层共用同一份数据容器,所以 ViewBag.Name = "张三" 等价于 ViewData["Name"] = "张三"。混着用容易混乱,选一种风格保持统一即可。
真正要传业务数据,比如用户列表、表单数据,应优先使用强类型视图模型(ViewModel):定义类 → 控制器 new 并传入 → 视图顶部声明 @model UserListViewModel。这样有类型安全、智能提示、易于单元测试,才是 MVC 的推荐做法。
基本上就这些。ViewData/ViewBag 是快刀,用对地方很顺手;但别当主菜,该上 ViewModel 还得上。
# c#
# .net
# mvc
# String
# Object
# NULL
# if
# count
# 封装
# 字符串
# int
# 继承
# 类型转换
# 对象
# 用户列表
# 器中
# 报错
# 结构化
# 都是
# 是一个
# 也不
# 才是
# 适用于
# 要用
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Win11怎么关闭定位服务_保护Win11位置隐私设置指南【详解】
如何在网页无标准表格标签时高效提取结构化数据
Win11怎么更改管理员名字 Win11修改账户名称详细步骤【教程】
c# await 一个已经完成的Task会发生什么
PHP怎么接收前端传的时间戳_处理时间戳参数转换技巧汇总【指南】
Windows10系统怎么查看显卡型号_Win10 dxdiag显示选项卡
Win11怎么更改电脑名称_Windows 11修改计算机名操作指南【步骤】
如何测试您的网站全球打开速度-网站海外测速工
Python网络超时处理_健壮性设计说明【指导】
如何优化Golang程序CPU性能_Golang CPU密集型任务优化方法
Win11开机Logo怎么换_Win11自定义启动画面工具【高级】
Windows10怎么备份注册表_Windows10注册表备份步骤【教程】
Win11怎么关闭自动调节亮度 Win11禁用内容自适应亮度【设置】
Win11怎么更改系统语言_Win11中文语言包下载与安装【指南】
php会话怎么开启_session_start函数的作用与使用时机【方法】
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
Win11如何设置系统语言_Win11系统语言切换教程【攻略】
如何在 Go 结构体中正确初始化 map 字段
如何使用Golang实现函数指针_函数变量与回调示例
Linux如何申请SSL免费证书_Linux下Certbot安装与Nginx自动续期【指南】
Win11怎么关闭粘滞键_彻底禁用Windows 11连按Shift粘滞键【步骤】
php8.4xdebug无法调试怎么办_php8.4xdebug配置问题解决【解答】
Win11如何关闭小娜Cortana Win11禁用Cortana语音助手【优化】
如何在 IIS 上为 ASP.NET 6 应用排除特定目录并交由 PHP 处理
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
如何外贸网站设计-能留住客户提升用户体验!
Python大型项目拆分策略_模块化解析【教程】
c++怎么处理多线程死锁_c++ lock_guard与unique_lock锁管理【技巧】
Mac如何解压zip和rar文件?(推荐免费工具)
c++中如何求一个数的平方根_c++ sqrt函数与牛顿迭代法
c# 在高并发下使用反射发射(Reflection.Emit)的性能
Win11怎么设置闹钟_Windows 11时钟应用闹钟设置指南【详解】
c++的STL算法库find怎么用 在容器中查找指定元素【实用教程】
如何使用Golang table-driven基准测试_多组数据测量函数效率
Win11怎么恢复旧版开始菜单_通过软件还原Win10风格菜单【详解】
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
Win11怎么设置应用分屏_Windows11贴靠布局Snap Layouts
Win11怎么关闭SmartScreen_禁用Windows Defender筛选器教程【步骤】
短链接怎么自定义还原php_修改解码规则适配需求【汇总】
Win11怎么关闭定位服务 Win11禁止应用获取位置信息【隐私】
Win11相机打不开提示错误怎么修_相机权限开启与驱动修复【影像修复】
c++怎么设置线程优先级与cpu亲和性_c++ 多核处理器性能绑定【指南】
如何使用Golang实现文件追加操作_向已有文件追加数据
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
php转mp4怎么保留字幕_php处理带字幕视频转换说明【说明】
Windows10如何更改日期格式_Win10区域设置短日期修改
Win11怎么设置默认输入法 Win11固定中文输入法【步骤】
Python函数接口文档化_自动化说明【指导】
php本地部署后数据库连接报错_1045accessdenied错误解决方法详解【汇总】
Mac如何修复应用程序权限问题_Mac磁盘工具修复权限【教程】
2026-01-05
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。