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

Razor表单提交仅返回单个LanguageModel对象,如何获取完整列表?

问题原因与解决方案

核心问题

你的视图代码中,nr++ 语句被放在了 foreach 循环的外部,导致循环执行过程中 nr 的值始终为0。所有生成的表单字段的name属性都会变成Languages[0].Id、Languages[0].Name这类重复索引的格式,后端模型绑定的时候,后续字段会直接覆盖第一个字段的值,最终只能得到1个LanguageModel对象。

修复后的视图代码

把nr++移到foreach循环内部,确保每次循环后索引值递增:

<div class="GroupContent">
    @{
        var nr = 0;
        foreach (var entry in Model.Languages)
        {
            <table cellspacing="" cellpadding="0" border="0">
                <tr>
                    <td class="Label">
                        <label for="">language</label>
                    </td>
                    <td class="Field">
                        <input type="hidden" name="Languages[@nr].Id" value="@entry.Id" />
                        <input type="hidden" name="Languages[@nr].GlobalTaggingId" value="@entry.GlobalTaggingId" />
                        <input type="hidden" name="Languages[@nr].LanguageId" value="@entry.LanguageId" />
                        <div class="input-control text">
                            <input type="text" name="Languages[@nr].Name" value="@entry.Name" />
                        </div>
                    </td>
                </tr>
            </table>
            nr++; <!-- 将索引递增移到循环内部 -->
        }
    }
</div>

更简洁的写法推荐

ASP.NET MVC中针对集合绑定,直接使用for循环代替foreach会更简洁,还能避免索引操作出错:

<div class="GroupContent">
    @for (int i = 0; i < Model.Languages.Count; i++)
    {
        <table cellspacing="" cellpadding="0" border="0">
            <tr>
                <td class="Label">
                    <label for="">language</label>
                </td>
                <td class="Field">
                    <input type="hidden" name="Languages[@i].Id" value="@Model.Languages[i].Id" />
                    <input type="hidden" name="Languages[@i].GlobalTaggingId" value="@Model.Languages[i].GlobalTaggingId" />
                    <input type="hidden" name="Languages[@i].LanguageId" value="@Model.Languages[i].LanguageId" />
                    <div class="input-control text">
                        <input type="text" name="Languages[@i].Name" value="@Model.Languages[i].Name" />
                    </div>
                </td>
            </tr>
        </table>
    }
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:15:44