23

有谁知道 MVC 视图的任何示例或教程,它在一个表单上显示父/子数据,并允许所有子记录可编辑?

例如,假设我有一个人员表和另一个包含他们拥有的车辆的表。一个表格,我想为给定的人显示每辆车,并使数据元素可编辑(即车牌号、汽车颜色等)以防出现错误。我不想跳到每辆车的单独编辑表单。

到目前为止,我的尝试已经使我可以显示数据,但我无法将其发回控制器。我试图在这里尽可能缩小问题的范围,但我仍然没有得到它,我认为可能需要一个更广泛的例子。有任何想法吗?

4

2 回答 2

27

你可以尝试这样的事情。

假设你有这个对象:

public class Vehicle
{
    public int VehicleID { get; set; }
    public string LicencePlate { get; set; }
    public string Color { get; set; }
}

这是您将用于编辑车辆详细信息的控制器操作(您将在其中发布表单):

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditVehicles(int Owner, Vehicle[] vehicles)
{
    //manipulate the data, then return back to the list
    return RedirectToAction("YourAction");
}

然后你应该这样设置你的表单:

<!--have a form for each person, listing their vehicles-->
<form action="/EditVehicles" method="post">
    <input type="hidden" name="Owner" value="25" />
    <input type="hidden" name="Vehicles[0].VehicleID" value="10" />
    <input type="text" name="Vehicles[0].LicencePlate" value="111-111" />
    <input type="text" name="Vehicles[0].Color" value="Red" />
    <input type="hidden" name="Vehicles[1].VehicleID" value="20" />
    <input type="text" name="Vehicles[1].LicencePlate" value="222-222" />
    <input type="text" name="Vehicles[1].Color" value="Blue" />
    <input type="submit" value="Edit" />
</form>

这将帮助 DefaultModelBinder 将表单数据正确绑定到控制器中的模型。因此Response.Write(vehicles[1].Color);在您的控制器上,将打印“蓝色”。

这是一个非常简单的例子,但我相信你明白了。有关将表单绑定到数组、列表、集合、字典的更多示例,请查看此处

于 2009-04-03T07:06:24.967 回答
0

我认为你能解决这个问题的最好方法是使用 AJAX 帖子,每当用户点击提交按钮时,你可以挂钩该事件,创建一个 JSON 数组,其中包含你想要保留的内容并将其发送出去。

当然,另一种方法是从 POST 操作中的“FormCollection”对象中获取所有信息。您只需要遍历所有键解析数据然后处理它。

于 2009-04-03T03:35:59.853 回答