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

ASP.NET Core 6 MVC中.cshtml无法识别@model引发空引用异常

问题分析与解决方案

核心原因

你在ASP.NET Core MVC项目中错误使用了Razor Pages专属的PageModel类。MVC和Razor Pages的模型绑定机制完全不同:

  • Razor Pages通过@page指令触发页面与PageModel的绑定
  • MVC的视图依赖控制器Action传递的ViewModel,不会自动实例化PageModel,因此视图中的@Model会为null,导致NullReferenceException

解决方案一:改用标准MVC架构

1. 创建ViewModel(无需继承PageModel)

namespace MyApp.Models
{
    public class TestViewModel
    {
        public string? Message { get; set; }
    }
}

2. 编写控制器Action

在控制器中初始化ViewModel并传递给视图:

namespace MyApp.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Test()
        {
            var model = new TestViewModel { Message = "Test" };
            return View(model);
        }
    }
}

3. 调整视图代码

确保视图的@model指向正确的ViewModel:

@model MyApp.Models.TestViewModel

<div>@Model.Message</div>

解决方案二:切换为Razor Pages模式(若需保留PageModel)

如果想继续使用PageModel,需要让MVC项目支持Razor Pages:

1. 配置服务与中间件

在Program.cs中添加Razor Pages相关配置:

var builder = WebApplication.CreateBuilder(args);

// 添加Razor Pages服务
builder.Services.AddRazorPages();

var app = builder.Build();

// 启用Razor Pages路由
app.MapRazorPages();

// 若需保留MVC路由,可同时添加:
// app.MapControllerRoute(
//     name: "default",
//     pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

2. 调整视图结构

  • 将视图移至Pages文件夹下(符合Razor Pages约定)
  • 在视图顶部添加@page指令:
@page
@model MyApp.Namespace.TestModel

<div>@Model.Message</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:26:15