Razor表单提交后返回的Model未包含修改数据问题求助
问题原因分析
- 表单字段名称与模型属性不匹配:你手动定义的输入框
name="name2"、隐藏框name="name1",字段名和模型的Name[0]属性完全不对应。ASP.NET MVC的模型绑定依赖表单字段name与模型属性名称一致来完成值映射,所以修改后的内容无法绑定到GlobalTaggingLocalizationModel的Name[0]上。 - 冗余隐藏字段覆盖有效值:你通过
@Html.HiddenFor(m => m.Name[0])生成了一个name为Name[0]的隐藏字段,它的值是页面加载时的原始数据库值。由于输入框name不匹配,模型绑定只会读取这个隐藏字段的原始值,导致接收的模型始终是初始数据。
修复方案
方案1:使用强类型辅助方法(推荐)
直接用Html.TextBoxFor生成输入框,它会自动生成符合模型绑定规则的name属性:
<form action="@Url.Action("SaveIndex")" method="POST" id="idForm"> @Html.HiddenFor(m => m.AutoCloseWindow) <div class="divEditColumns"> <table cellpadding="0" cellspacing="0" border="0"> <tr valign="top"> <td> <div class="Column Column100"> <div class="divFieldGroup"> <div class="GroupHeadline">Übersetzung</div> <div class="GroupContent"> <table cellspacing="" cellpadding="0" border="0"> <tr> <td class="Label"> <label for="">language</label> </td> <td class="Field"> <div class="input-control text"> @Html.TextBoxFor(m => m.Name[0]) </div> </td> </tr> </table> </div> </div> </div> </td> </tr> </table> </div> </form>
方案2:手动指定正确的name属性
如果坚持手动写input标签,必须保证name属性与模型绑定路径一致:
<input type="text" name="Name[0]" value="@Model.Name[0]" />
无论用哪种方案,必须删除@Html.HiddenFor(m => m.Name[0]),避免原始值覆盖修改后的内容。
额外说明
ASP.NET MVC对集合类型(如数组、List)的绑定规则是使用属性名[索引]的格式作为表单字段name,这样才能正确映射到集合的对应元素。强类型辅助方法会自动遵循这个规则,尽量避免手动编写name属性以减少错误。
内容的提问来源于stack exchange,提问作者inno
相关产品推荐
相关产品推荐

