【问题标题】:Passing Model sub-tables to HTTPPOST Controller for Model Editing将模型子表传递给 HTTPPOST 控制器以进行模型编辑
【发布时间】:2017-08-14 19:27:35
【问题描述】:

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

My View 模型是根据 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(m => m. 的标准 Edit.cshtml 一起使用,显示部分都可以正常工作,直到我想在子表中发布多个项目。

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

感谢您提供的任何指导。

【问题讨论】:

  • 试试强大的@Html.EditorFor...,它可以生成能够回发更复杂类型甚至列表的HTML。在EditorTemplates 的帮助下,您可以控制应显示哪些项目以及应将哪些项目呈现为隐藏字段。最后,您需要将所有内容发送回页面。一些帮助:mhwelander.net/2014/03/26/…
  • @thomashaid.com, EditorFor() 将不允许动态添加和删除集合项。
  • 参考答案herehere 获取一些示例
  • @StephenMuecke 哦,是的,当然,我不知何故错过了这个要求,在我看来,汤姆有更多基本问题(例如根本无法发送复杂对象)。无论如何,对于这种“动态”方法,knockoutjs.com 之类的东西会给你最大的安慰。我希望与 ASP.NET 的集成更加无缝。 (还没试过knockoutmvc.com
  • 不幸的是,我必须使用 ASP.net……我尝试了许多不同的方法来尝试将表格传回。令人沮丧的是,MVC 无法将所有模型数据传递给 POST 函数。如果是这样的话,做我需要做的就非常容易了。

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


【解决方案1】:

我已经解决了自己的问题,这带来了改变……

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

在我的主要 html 代码中添加

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

然后我必须创建一个名为 _POItemsPartial 的 MVC 部分页面 (Razor)。

在该页面中,我放置了以下内容..

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

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

当 POST 操作发生时,我现在得到了 PurchaseOrder 中所有 3 个项目的描述。

**

更新:

**

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 2011-07-03
    • 2013-05-30
    • 1970-01-01
    相关资源
    最近更新 更多