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

Asp.Net Core Razor页面PostBack时PartialView模型为null如何解决?

问题核心原因

你遇到的部分视图模型提交后为null的问题,同时存在模型声明错误和模型绑定规则不匹配两个问题:

  1. 局部视图模型类型不匹配:你定义的子模型类为PartialSampleViewModel,但局部视图首行声明的模型类型是不存在的PartialSampleModelRecord,首先就会导致字段渲染异常。
  2. 缺少模型绑定前缀:ASP.NET Core的表单模型绑定依赖表单字段的name属性匹配模型结构。你直接将子模型传入局部视图时,生成的字段name为DetailsDate、DetailsDescription,而主视图模型需要前缀为PartialSampleModel.的字段才能绑定到对应嵌套属性,没有前缀的字段会被绑定逻辑忽略,最终PartialSampleModel就为null。
  3. 额外小问题:控制器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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 15:15:03