Html 将模型子表传递给HTTPPOST控制器以进行模型编辑

Html 将模型子表传递给HTTPPOST控制器以进行模型编辑,html,sql,asp.net-mvc,asp.net-mvc-4,model,Html,Sql,Asp.net Mvc,Asp.net Mvc 4,Model,我已经创建了一个MVC5应用程序,我正在其中创建一个定制的采购系统 我的视图模型是基于SQL数据库的内容生成的。数据库对带有一些基本数据的采购订单使用单个主键。除了基本数据外,每个采购订单中还可以有多个项目。这将创建一个关系,其中一次购买可以有N个项目 当我在做表单提交时,发送特定于采购订单的信息,即使用TextBoxFor(m=>m.Date),效果很好。然而,我似乎无法传递其中所有项目的列表。例如,当我在执行@Html.TextBoxFor(m=>m.Details.ItemName)时,它

我已经创建了一个MVC5应用程序,我正在其中创建一个定制的采购系统

我的视图模型是基于SQL数据库的内容生成的。数据库对带有一些基本数据的采购订单使用单个主键。除了基本数据外,每个采购订单中还可以有多个项目。这将创建一个关系,其中一次购买可以有N个项目

当我在做表单提交时,发送特定于采购订单的信息,即使用TextBoxFor(m=>m.Date),效果很好。然而,我似乎无法传递其中所有项目的列表。例如,当我在执行@Html.TextBoxFor(m=>m.Details.ItemName)时,它在发布期间没有填充模型中的节

我曾尝试使用@Html.TextBoxFor(m=>m.Details)发送所有信息,但它会抛出错误,因为TextBoxFor无法处理这些数据类型

我想要一个系统,在这个系统中,我可以通过添加或删除项目来编辑采购订单模型,而无需提交到我的数据库,直到按下“保存”按钮

我的视图模型示例是

public class PurchasingEditModel
{
    public tbl_PurchaseOrder PurchaseOrder;
}
采购订单本身通过采购订单的外键引用链接到PurchaseOrderDetails(在SQL中)。这将为一个采购订单创建多个项目

编辑页面的控制器为

public ActionResult Edit(int? pkPurchaseOrder)
{
 model.PurchaseOrder = db.PurchaseOrder.Where(x => x.pkPurchaseOrder == pkPurchaseOrder);

return View(model);
}
这与使用@Html.TextBoxFor(m=>m)的标准Edit.cshtml一起使用。在我想在子表中发布多个项目之前,所有这些都可以很好地用于显示部分

对我来说,处理这个问题最简单的方法是在显示期间将模型的所有内容传递给POST函数,其中包含PO中项目的所有元素


非常感谢您提供的任何指导。

我已经解决了我自己的问题,这使我改变了

要在子表(IQueryable)中发布数据,我必须执行以下操作

在我的主html代码中添加

@foreach(var item in Model.PurchaseOrder.tbl_Details)
{
    @Html.Partial("_POItemDetailsPartial", item)
}
然后我不得不创建一个名为_poitempartial的MVC部分页面(Razor)

在那一页中,我写了以下内容

@using (Html.BeginCollectionItem("Model.PurcahseOrder.tbl_Details")
{
    @model ModelSpace.Model.tbl_Details

    @Html.TextBoxFor(m => m.Description)
}
当POST操作发生时,我现在可以得到PurchaseOrder中所有3个项目的描述

**

更新: **

尽管获得了这些数据,但我现在丢失了所有原始模型数据,如总价。似乎传递模型的部分调用。tbl_Details仅传递该信息并清除其余部分。 当它返回时,所有更高级别的数据都被删除了。如果我注释掉了部分调用,它就会返回。
结果我仍然需要帮助(

试试强大的
@Html.EditorFor…
,它可以生成Html,可以发回更复杂的类型甚至列表。借助
编辑模板
,您可以控制哪些项目应该显示,哪些应该呈现为隐藏字段。最后,您需要将所有内容发送回页面。一些帮助:@thomashaid.com,
EditorFor()
将不允许动态添加和删除集合项。有关某些信息,请参阅答案和examples@StephenMuecke哦,是的,当然,我不知何故错过了那个要求,在我看来,Tom似乎有更多的基本问题(例如,根本无法发送复杂的对象)。无论如何,出于这个原因“动态”方法,例如将给您带来最大的安慰。我希望与ASP.NET的集成将更加无缝。(尚未尝试)不幸的是,我必须使用ASP.net……我尝试了许多不同的方法尝试将表传递回。它的融合说明MVC无法将所有模型数据传递给POST函数。如果是这样,那么我需要做的事情将非常容易。