从ASP.NET MVC表单返回对象列表

时间:2015-12-22 13:40:59

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我正在使用C#和.NET Framework 4.5.1开发ASP.NET MVC 5应用程序。

我想创建一个动态表单,以允许用户在需要更多字段时插入更多字段。然后,当他们提交表单时,在Controller上检索这些数据。

这是我的观点:

public class MyProductController : Controller
{
    //
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Save(List<ProductViewModel> viewModel)
    {
        return null;
    }
}

问题在于,当我提交时,在Controller的方法中我得到一个null。

这是控制器:

CredentialCache

当用户点击“提交”按钮时,如何在MyProductController.Save方法上获取某些内容?

4 个答案:

答案 0 :(得分:1)

我猜你在这里有一个错字..它应该如下:

https://regex101.com/r/hU6tP0/5

答案 1 :(得分:1)

我已使用此HTML代码修复此错误:

<td>
    <div class="group">
        <input type="text" 
            class="productClass"
            name="[0].ProductName" 
            id="[0].ProductName"
            required />
        @*<span class="highlight"></span>
        <span class="bar"></span>
        <label>Nombre del producto</label>*@
    </div>
</td>

现在nameid[0].ProductName

更多信息here

答案 2 :(得分:0)

为了让MVC将表单数据绑定到Action方法的参数 他们的名字应该匹配。

在你的情况下:

...
name="model[0].ProductName" 

应该是:

...
name="viewModel[0].ProductName" 

因为这是您提供的参数的名称:

public ActionResult Save(List<ProductViewModel> viewModel)

另外要小心,因为索引不应该被破坏,这意味着它们应该是0,1,2 ......等而不会跳过一个数字。

  

我们在属性中阅读的方式是寻找   参数名称[索引] .PropertyName。索引必须从零开始   完整。

您可以在Scott Hanselman的帖子here

中阅读更多内容

答案 3 :(得分:-2)

您没有正确地将模型属性与您的Html输入相关联。

错:

<input type="text" class="productClass" name="model[0].ProductName" id="model[0].ProductName" required />

右:

<input type="text" class="productClass" name="@Model[0].ProductName" id="@Model[0].ProductName" required />