ASP.NET Core 7中ViewBag、ViewData、TempData均为空问题排查
问题分析与解决
核心错误点
未实例化目标对象
你把ClassName newName = new ClassName(name, id);这行代码注释掉了,导致newName变量完全未定义,直接给TempData["Message"]赋值newName.name会触发空引用异常,最终TempData自然没有有效内容。重定向场景的配置缺失(若实际是重定向操作)
你提到是从页面重定向到另一页,但当前控制器返回的是return View();(直接返回视图,并非重定向)。如果实际使用RedirectToAction这类重定向方法,ASP.NET Core的TempData依赖会话服务,需确保Program.cs中已配置:builder.Services.AddSession(); // ... app.UseSession();另外重定向后
TempData的数据默认只能读取一次,若需多次读取可使用TempData.Peek("Message")或TempData.Keep("Message")。
修正后的控制器代码示例
public IActionResult Index(string id, string name) { // 实例化对象 ClassName newName = new ClassName(name, id); TempData["Message"] = newName.name; // 若是重定向到其他动作方法,改用以下写法 // return RedirectToAction("目标动作方法名"); return View(); }
更直接的视图传值方式(非重定向场景)
如果是直接返回当前视图的场景,使用ViewData或ViewBag会更简单:
控制器代码
public IActionResult Index(string id, string name) { ViewBag.Message = name; // 或者用ViewData // ViewData["Message"] = name; return View(); }
视图代码
<h4>Welcome back to @ViewBag.Message!</h4> <!-- 对应ViewData的写法 --> <!-- <h4>Welcome back to @ViewData["Message"]!</h4> -->
内容的提问来源于stack exchange,提问作者Shantanu Pandey
相关产品推荐
相关产品推荐

