从 FormCollection 中填充模型

Filling out a model from a FormCollection

我想用 FormCollection 中的数据填充我的模型。

我传递到页面的视图模型有一个 属性,一个汽车列表。

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)

因为当表单数据被序列化并发布时,名称会作为 Cars[0].Id,模型绑定无法绑定。这是我的理解。

有没有办法以一种非常简单的方式将 FormCollection 中的值提取到我的模型中?可能使用反射?或者我错了,我们可以自动绑定?

如果您一次只发送一个汽车实例,您真的不需要包含迭代器来呈现表单输入名称,因为每个表单只需在自己的范围内发送输入。

那么你只需要收到一个Car Model,就像你在原问题中说的那样:

public JsonResult Update(Car car) 

您只需要确保覆盖助手提供的默认 ID 和名称,就像您对 CarName 输入所做的那样。

使用 foreach 循环并使用您的汽车模型的属性。那么你的模型应该在发布到更新操作时绑定:

@foreach (var car in Model.Cars)
    {
        <form action="#" id="updateForm-@Model.Id" class="updateForm">
            @Html.AntiForgeryToken()
            @Html.Hidden("Id", car.Id)