Razor页面Post请求返回模型始终为null的问题排查
问题原因及解决办法
导致提交后模型为null的原因有三个核心问题:
错误使用
[FromBody]特性
表单提交的multipart/form-data格式属于表单键值对数据,而[FromBody]是用来解析JSON、XML这类请求体内容的(通常用于AJAX异步提交场景)。用它接收表单提交的数据,框架无法完成模型绑定,自然返回null。表单input缺少
name属性
Razor页面的模型绑定依赖表单元素的name属性与模型字段名匹配。你当前的input仅设置了value,没有指定name="test",框架无法识别该字段对应模型的哪个属性,无法完成赋值。表单handler与后端方法不匹配
表单设置了asp-page-handler="Button_Submit",但后端对应的处理方法需要命名为OnPostButton_Submit,而非默认的OnPost。如果不需要自定义handler,直接去掉该属性即可。
修正后的代码示例
方案1:使用默认Post方法
表单代码
<form method="post" enctype="multipart/form-data"> <!-- 用asp-for自动生成name和匹配的value,更规范 --> <input asp-for="test" /> <input style="width: 30% !important; opacity: 0.2;" value="Weiter" class="baseButton" type="submit"> </form>
PageModel代码
namespace skillbased_webapp.Pages.Jobs { [BindProperties] public class Skills : PageModel { public string test { get; set; } = "test"; public void OnGet() { } // 去掉[FromBody],依靠BindProperties自动绑定模型字段 public void OnPost() { // 直接使用this.test即可获取提交的值 } } }
方案2:保留自定义handler
表单代码
<form method="post" enctype="multipart/form-data" asp-page-handler="Button_Submit"> <input asp-for="test" /> <input style="width: 30% !important; opacity: 0.2;" value="Weiter" class="baseButton" type="submit"> </form>
PageModel对应方法
// 方法名需与handler名称对应:OnPost + HandlerName public void OnPostButton_Submit() { // 直接使用this.test获取提交值 }
内容的提问来源于stack exchange,提问作者inno
相关产品推荐
相关产品推荐

