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
相关产品推荐
相关产品推荐

