解决 ASP.NET MVC 表单数组提交问题
在 ASP.NET MVC 中,提交包含对象数组的表单可能会遇到问题。例如:
您的表单包含多行,每行代表数组中的一个项目。您使用 jQuery 动态添加和删除行。但是,提交表单后,模型中的数组属性为空。
解决方案:
要解决此问题,您需要在 for 循环中手动生成数组的控件。这确保了控件使用索引正确命名。
修改后的代码:
视图中:
<code class="language-csharp">@using (Html.BeginForm("Save", "ConnectBatchProduct", FormMethod.Post)) { .... <table> .... @for(int i = 0; i < Model.BatchProducts.Count; i++) { <tr> <td>@Html.TextBoxFor(m => m.BatchProducts[i].Quantity)</td> <td>@Html.TextBoxFor(m => m.BatchProducts[i].BatchName)</td> <td> <!-- 包含隐藏输入以跟踪项目索引 --> <a></code>
控制器中:
<code class="language-csharp">public ActionResult Save(ConnectBatchProductViewModel model) { .... }</code>
其他注意事项:
如果要动态添加和删除视图中的项目,可以使用 BeginCollectionItem
辅助方法或 HTML 模板。例如,您可以创建一个用于添加新项目的模板:
<code class="language-html"><tr> <td></td> <td></td> <td> <a></code>
然后,您可以使用 JavaScript 动态将新项目添加到表格中:
<code class="language-javascript">$("#addrow").click(function() { var index = (new Date()).getTime(); // 唯一的索引 var clone = $('#NewBatchProduct').clone(); // 克隆 BatchProducts 项目 // 更新克隆的索引 clone.html($(clone).html().replace(/\[#\]/g, '[' + index + ']')); clone.html($(clone).html().replace(/"%"/g, '"' + index + '"')); $("table.order-list").append(clone.html()); });</code>
以上是为什么我的ASP.NET MVC表单阵列属性在提交后属于NULL?的详细内容。更多信息请关注PHP中文网其他相关文章!