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

如何在Razor Page的OnPostSave中获取textarea的列表值?

问题解决方案

问题原因

使用foreach遍历Numbers列表时,asp-for="@item.val"生成的HTML元素name属性不包含集合索引,ASP.NET Core模型绑定器无法识别这些字段属于Numbers集合,因此Post请求时无法将值绑定到Numbers,导致集合计数为0。

修复方案

将前端的foreach循环改为for循环,通过索引访问集合元素,让asp-for生成符合集合绑定规则的name属性(格式为Numbers[索引].val)。

修改后的前端代码:

@for (int i = 0; i < Model.Numbers.Count; i++)
{
    <textarea asp-for="Numbers[i].val" style="width:100%">@Model.Numbers[i].val</textarea>
}

后台补充(可选,避免空引用):

确保Numbers在OnGet方法中初始化,防止页面加载时出现空引用异常:

public void OnGet()
{
    Numbers ??= new List<number>();
    // 示例:初始化测试数据
    if (Numbers.Count == 0)
    {
        Numbers.Add(new number { val = 1 });
        Numbers.Add(new number { val = 2 });
    }
}

原理说明

ASP.NET Core模型绑定器识别集合的前提是表单字段的name属性包含「集合名称+索引」的结构(如Numbers[0].val)。for循环可以通过索引正确生成这种格式的name,而foreach遍历的是单个独立元素,无法提供集合上下文的索引信息,因此生成的name无法被绑定器识别为集合的一部分。

内容的提问来源于stack exchange,提问作者Mark C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:42:08