解決 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中文網其他相關文章!