我想用FormCollection中的数据填充我的模型。
我传递给我的页面的viewmodel有一个属性,一个List of Cars。
public List<Car> Cars { get; set; }
在视图中,我循环遍历每个并输出为表单
@for (int i = 0; i < Model.Cars.Count; i++)
{
<form action="#" id="updateForm-@Model.Cars[i].Id" class="updateForm">
@Html.AntiForgeryToken()
@Html.Hidden("Id", Model.Cars[i].Id)
<div class="row">
<div class="col-md-2 col-sm-4">
@Html.TextBoxFor(m => m.Cars[i].CarName, new { placeholder = "car name", name = "CarName", id = "CarName", @class = "user-friendly-size" })
</div>
等。每个表单都有自己的按钮。
然后我使用JQuery form.serialise并将表单数据发送到后端
[AjaxOnly]
public JsonResult Update(FormCollection form)
据我了解,我不能使用模型装订器,即
public JsonResult Update(Car car)
因为当表单数据被序列化并发布时,名称来自 汽车[0] .Id,模型绑定器无法绑定。这是我的理解。
是否有办法以简单的方式将FormCollection中的值提取到我的模型中?可能使用反射?或者我错了,我们可以自动绑定?
答案 0 :(得分:2)
使用foreach循环并使用您的汽车模型的属性。然后,在发布到Update操作时,您的模型应该绑定:
@foreach (var car in Model.Cars)
{
<form action="#" id="updateForm-@Model.Id" class="updateForm">
@Html.AntiForgeryToken()
@Html.Hidden("Id", car.Id)
答案 1 :(得分:0)
如果您一次只发送一个Car实例,那么您真的不需要包含迭代器来呈现表单输入名称,因为每个表单只是在自己的范围内发送输入。
然后你只需要收到一个汽车模型,就像你在原始问题中说的那样:
public JsonResult Update(Car car)
您只需要确保覆盖帮助程序给出的默认ID和名称,就像使用CarName输入一样。