You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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");
});
验证步骤
  1. 删除或注释HomeController的Index方法
  2. 重启应用并访问首页
  3. 通过断点或日志确认IndexModel构造函数已执行
  4. 检查页面是否正常显示History Items: 4

内容的提问来源于stack exchange,提问作者Pete

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 20:15:31