ASP.NET Razor判断Model属性null时if else报错解决
Razor视图分支判断空引用异常修复方案
报错核心原因
抛出Object reference not set to an instance of an object的根本原因是控制器返回视图时没有传入HomeModel实例,视图绑定的强类型Model对象本身为null,直接访问Model.uname属于对null对象取属性,必然触发空引用。该问题和动作方法添加[HttpGet]/[HttpPost]特性没有关联,特性只负责路由请求匹配,不会自动初始化视图模型。
修复步骤
1. 控制器返回视图时必须传入模型实例
哪怕不需要提前给模型字段赋值,也要初始化一个模型实例传给视图,从根源避免Model为null的问题:
public IActionResult Index() { HomeModel model = new HomeModel(); // 存在已登录用户信息时可在此处赋值,例如从身份认证凭据、会话中读取用户名 // model.uname = context.User.Identity.Name; return View(model); }
2. 视图分支逻辑增加空值兜底(推荐)
调整视图的判断逻辑,先校验Model本身非空,再校验uname字段,避免后续漏传模型时直接抛异常:
<li class="nav-item"> @if (Model != null && Model.uname != null) { <a class="nav-link changing-color">@ViewBag.username</a> } else { <a class="nav-link changing-color" data-bs-toggle="offcanvas" data-bs-target="#offcanvasRight" aria-controls="offcanvasRight" id="login-register">Login / Register</a> } </li>
其他相关问题说明
- 使用
<运算符做布尔判断被标记为语法错误,是因为Razor解析器会优先把<识别为HTML标签的起始标记,只要把C#判断逻辑写在@{}、@if这类明确的Razor代码块范围内,就不会出现解析错误。 - 如果视图使用强类型模型,务必在视图文件最顶部添加模型声明:
@model 你的项目命名空间.HomeModel,否则智能提示和运行时绑定都会出现异常。
内容的提问来源于stack exchange,提问作者エース
相关产品推荐
相关产品推荐

