对象列表的Model Binding无法正常工作问题求助
问题解决:对象列表的Model Binding失效
核心原因:标签助手属性拼写错误
你的视图代码中所有的aps-for都是笔误,正确的Razor Pages标签助手属性应为asp-for。这个错误会导致生成的<input>元素没有正确的name属性值,ASP.NET Core的Model Binding无法识别这些表单字段,因此UploadTransactions列表只会被初始化为空列表。
修正后的视图字段示例:
<td><input class="form-control" type="text" asp-for="UploadTransactions[@i].Date" value="@Model.Transactions[i].Date" /></td> <td><input class="form-control" type="text" asp-for="UploadTransactions[@i].Amount" value="@Model.Transactions[i].Amount" /></td> <!-- 其余字段同理替换aps-for为asp-for -->
额外优化建议
- 在
OnGet方法中初始化UploadTransactions列表,避免视图渲染时可能出现的空引用问题:
public void OnGet() { Transactions = JsonConvert.DeserializeObject<List<Transaction>>(this.HttpContext.Session.GetString("UploadTransactions")); // 初始化列表并提前填充空对象 UploadTransactions = Transactions.Select(t => new UploadTransaction()).ToList(); }
- 验证表单字段格式:修正
asp-for后,生成的input标签name属性应呈现为UploadTransactions[0].Date、UploadTransactions[1].Amount这类格式,这是ASP.NET Core识别列表绑定的标准格式。
调试POST数据的方法
- 浏览器开发者工具(F12):切换到网络标签,提交表单后查看对应POST请求的Form Data,检查参数名称是否符合
UploadTransactions[index].PropertyName的格式。 - 在
OnPost中直接读取请求表单:
public IActionResult OnPost() { // 打印所有表单字段,确认提交数据是否正确 foreach (var key in Request.Form.Keys) { Console.WriteLine($"{key}: {Request.Form[key]}"); } return Page(); }
内容的提问来源于stack exchange,提问作者Joshua Peacock
相关产品推荐
相关产品推荐

