ASP.NET MVC编辑多个子记录的示例

23

请问有没有关于MVC视图的例子或教程,可以在一个表单中显示父子数据,并允许所有子记录可编辑?

例如,假设我有一个人员表和一个包含他们拥有的车辆的表。在一个表单中,我想为给定的人员显示每辆车,并使数据元素可编辑(例如车牌号码、车身颜色等),以便更正错误。我不想为每辆车跳转到单独的编辑表单。

到目前为止,我的尝试已经使我能够显示数据,但是我无法将其提交回控制器。我已经尽可能缩小了问题的范围(链接),但我仍然不能解决问题,因此我认为需要更广泛的示例。有什么想法吗?

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);会打印出"Blue"。

这是一个非常简单的例子,但我相信你已经明白了。如果想要更多关于绑定表单到数组、列表、集合、字典的例子,请查看这里


这在向我的/Create URL进行POST时运行良好,但在向/Edit URL进行GET时无法绑定回现有数据。我的Create和Edit页面都使用相同的部分视图,因此使用相同的强类型模型。有任何想法吗? - JMS
@JMs技术上讲,GET请求无法“绑定”任何东西。您将ASP.NET MVC与ASP.NET Web Forms混淆了。除了所请求的资源之外,GET不会向控制器提供任何信息。虽然这听起来可能更容易使用AJAX来实现。 - bzlm
我尝试在我的索引页面开头设置 Html.BeginForm,并创建了一个复选框,当单击时提交表单。问题是我在操作中得到的模型是一个没有值的新模型? - Shimmy Weitzhandler

0

我认为你可以通过使用AJAX提交来解决这个问题。每当用户点击提交按钮时,你可以钩入该事件,创建一个JSON数组以持久化所需的内容并将其发送过去。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接