ASP.NET Core页面模型未构造,空引用异常求助
问题根源
你遇到的核心问题是MVC控制器路由与Razor Pages路由冲突,请求被MVC的HomeController处理,而非Razor Pages的IndexModel,导致PageModel的构造函数从未执行,最终引发NullReferenceException。
具体逻辑:
- 你注册的默认MVC路由
{controller=Home}/{action=Index}/{id?}会优先匹配HomeController的Index方法 - 该方法返回的
View()会加载/Pages/Home/Index.cshtml,但此时视图绑定的IndexModel并未被Razor Pages框架初始化(请求走的是MVC管道,而非Razor Pages管道),所以Model为null
解决方案
方案1:移除冗余的HomeController(推荐)
既然你用Razor Pages开发该页面,无需保留对应的MVC控制器。直接删除HomeController类,请求会自动匹配到Razor Pages的IndexModel。
方案2:调整路由注册顺序
若必须保留MVC控制器,将MapRazorPages()放在所有MVC路由注册之前,让Razor Pages路由优先匹配:
app.UseEndpoints(endpoints => { // 先注册Razor Pages路由 endpoints.MapRazorPages(); endpoints.MapControllerRoute( name: "account", pattern: "Account/{action=Login}", defaults: new { controller = "Account" }); endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
方案3:修正RazorViewEngine配置
确保视图查找路径覆盖共享视图,避免潜在的加载异常:
services.Configure<RazorViewEngineOptions>(options => { options.AreaViewLocationFormats.Clear(); options.AreaViewLocationFormats.Add("/Pages/Account/{0}.cshtml"); options.AreaViewLocationFormats.Add("/Pages/Shared/{0}.cshtml"); options.ViewLocationFormats.Add("/Pages/{1}/{0}.cshtml"); // 补充共享视图路径 options.ViewLocationFormats.Add("/Pages/Shared/{0}.cshtml"); });
验证步骤
- 删除或注释
HomeController的Index方法 - 重启应用并访问首页
- 通过断点或日志确认
IndexModel构造函数已执行 - 检查页面是否正常显示
History Items: 4
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

