有没有人知道MVC视图的任何示例或教程,它们在一个表单上显示父/子数据,并允许所有子记录都可编辑?
例如,假设我有一张人和另一张包含他们拥有的车辆的人。一种形式,我想展示给定人的每辆车,并在出现错误时使数据元素可编辑(即车牌号,车颜色等)。我不想为每辆车跳转到单独的编辑表格。
到目前为止,我的尝试让我能够显示数据,但我无法将其发回给控制器。我试图尽可能缩小问题的范围here,但我仍然没有得到它,我认为可能有更广泛的例子。有什么想法吗?
答案 0 :(得分: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);
将打印“蓝色”。
这是一个非常简单的例子,但我相信你明白了。有关将表单绑定到数组,列表,集合,词典的更多示例,请查看here。
答案 1 :(得分:0)
我认为你能解决的最好方法是使用AJAX帖子,每当用户点击提交按钮时,您可以挂钩该事件,创建一个JSON数组,其中包含您要保留并发送的内容。
另一种方法当然是从POST动作中的“FormCollection”对象获取所有信息。您只需要遍历所有密钥解析数据然后进行处理。