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

时间:2017-03-22 15:17:12

标签: html sql asp.net-mvc asp.net-mvc-4 model

我创建了一个MVC 5应用程序,我正在创建一个自定义购买系统。

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

当我在做表格时提交发送采购订单特定信息,即使用TextBoxFor(m => m.Date),工作正常。但是我似乎无法通过其中所有项目的列表。例如,当我在做@ Html.TextBoxFor(m => m.Details.ItemName)时,它不会在POST期间填充模型中的部分。

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

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

我的视图模型示例是

public class PurchasingEditModel
{
    public tbl_PurchaseOrder PurchaseOrder;
}

采购订单本身通过采购订单的外键参考链接到PurchaseOrderDetails(在SQL中)。这会创建多个项目到一个PO。

编辑页面的控制器是

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

return View(model);
}

这与使用@ Html.TextBoxFor的标准Edit.cshtml一起使用(m => m。显示部分都能正常工作,直到我想在子表中发布多个项目。

对我来说,最简单的方法就是在显示过程中将模型的所有内容传递给POST函数。

将具有PO中项目的所有元素的内容传递给它。

您可以给予任何指导。

1 个答案:

答案 0 :(得分:0)

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

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

在我的主要html代码中添加

@foreach(var item in Model.PurchaseOrder.tbl_Details)
{
    @Html.Partial("_POItemDetailsPartial", item)
}

然后我必须创建一个名为_POItemsPartial的MVC Partial Page(Razor)。

在该页面中,我提出了以下内容..

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

    @Html.TextBoxFor(m => m.Description)
}

当POST动作发生时,我现在获取PurchaseOrder中所有3个项目的描述。

**

UPDATE:

**

尽管获得了这些数据。我现在正在丢失所有原始模型数据,例如Total Price,似乎传递Model.tbl_Details的部分调用只传递了该信息并清除了其余部分。 当它返回时,最终删除所有更高级别的数据。如果我注释掉部分通话,那么一切都会回来。 事实证明我仍然需要帮助.... :(