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

对象列表的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 -->

额外优化建议

  1. 在OnGet方法中初始化UploadTransactions列表,避免视图渲染时可能出现的空引用问题:
public void OnGet()
{
    Transactions = JsonConvert.DeserializeObject<List<Transaction>>(this.HttpContext.Session.GetString("UploadTransactions"));
    // 初始化列表并提前填充空对象
    UploadTransactions = Transactions.Select(t => new UploadTransaction()).ToList();
}
  1. 验证表单字段格式:修正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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:45:30