首页 >后端开发 >C++ >为什么我的ASP.NET MVC表单阵列属性在提交后属于NULL?

为什么我的ASP.NET MVC表单阵列属性在提交后属于NULL?

Linda Hamilton
Linda Hamilton原创
2025-02-02 04:08:14679浏览

Why is my ASP.NET MVC form array property null after submission?

解决 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn