我正在使用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方法上获取某些内容?
答案 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>
现在name
和id
是[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 />