Razor Pages表单提交后PersonnelNo属性回传为null如何解决
问题根因
两个写法错误导致值回传失败:
HiddenFor辅助方法用法错误:该方法第二个参数是HTML特性配置对象,不是字段赋值参数,传入Model.PersonnelNo的写法不会给隐藏域设置value值,表单提交时根本不会携带该字段数据- 隐藏域未正确渲染值,导致POST请求中没有
PersonnelNo对应的键值对,模型绑定无法给属性赋值,请求处理时拿到的属性值就是null
修复步骤
- 调整PageModel的属性绑定配置
[BindProperty(SupportsGet = true)]仅表示允许GET请求绑定该属性,不会阻止POST绑定,可直接保留或改为默认配置,代码示例:
public class Expenditures: PageModel { [BindProperty] public string PersonnelNo {get;set;} public async Task OnGetAsync() { // 原有业务逻辑 } public async Task<IActionResult> OnPostAsync() { // 此处可直接获取回传的PersonnelNo值 return Page(); } }
- 修正视图中隐藏域的写法
删除HiddenFor第二个手动传值的参数,辅助方法会自动读取Model对应属性值渲染到隐藏域的value属性中,正确写法:
<div class="form-control"> @Html.HiddenFor(model => model.PersonnelNo) <input type="submit" value="Save" class="btn btn-primary"/> </div>
也可以使用标签助手写法,效果完全一致:
<input type="hidden" asp-for="PersonnelNo" />
运行逻辑说明
修复后执行流程:
- 首次GET加载页面时,PersonnelNo正常赋值,隐藏域自动将属性值渲染到input的value属性中
- 提交表单时,隐藏域会随表单一同提交
PersonnelNo=对应值的键值对,模型绑定自动匹配赋值给PageModel的同名属性,POST方法中可直接复用该值,不会再出现null问题
内容的提问来源于stack exchange,提问作者Baldie47
相关产品推荐
相关产品推荐

