Asp.Net Core Razor页面PostBack时PartialView模型为null如何解决?
问题核心原因
你遇到的部分视图模型提交后为null的问题,同时存在模型声明错误和模型绑定规则不匹配两个问题:
- 局部视图模型类型不匹配:你定义的子模型类为
PartialSampleViewModel,但局部视图首行声明的模型类型是不存在的PartialSampleModelRecord,首先就会导致字段渲染异常。 - 缺少模型绑定前缀:ASP.NET Core的表单模型绑定依赖表单字段的
name属性匹配模型结构。你直接将子模型传入局部视图时,生成的字段name为DetailsDate、DetailsDescription,而主视图模型需要前缀为PartialSampleModel.的字段才能绑定到对应嵌套属性,没有前缀的字段会被绑定逻辑忽略,最终PartialSampleModel就为null。 - 额外小问题:控制器Index方法中初始化子模型时,
DetalsDate拼写错误,少了字母i,应为DetailsDate,会导致初始赋值失效。
修复方案
1. 修正局部视图的模型声明
将局部视图第一行改为正确的模型类型:
@model PartialSampleViewModel
2. 修改主页面局部视图调用方式
调用partial标签时使用for属性而非直接传model,框架会自动生成正确的绑定前缀:
<!-- 原写法 --> <!-- <partial name="@Model.ViewName" model="@Model.PartialSampleModel" /> --> <!-- 修正后写法 --> <partial name="@Model.ViewName" for="PartialSampleModel" />
修改后生成的表单字段name会自动变为PartialSampleModel.DetailsDate、PartialSampleModel.DetailsDescription,和主模型的嵌套结构匹配,提交后就能正确绑定。
3. 修正控制器中的拼写错误
将Index方法中子模型的初始化代码修正拼写:
PartialSampleModel = new PartialSampleViewModel() { DetailsDate = DateTime.Now, // 修正拼写错误 DetailsDescription = "Description" }
完成以上三步后提交表单,mainPageViewModel.PartialSampleModel就能正常获取值了。
内容的提问来源于stack exchange,提问作者JohnB
相关产品推荐
相关产品推荐

