【发布时间】: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()将不允许动态添加和删除集合项。 -
@StephenMuecke 哦,是的,当然,我不知何故错过了这个要求,在我看来,汤姆有更多基本问题(例如根本无法发送复杂对象)。无论如何,对于这种“动态”方法,knockoutjs.com 之类的东西会给你最大的安慰。我希望与 ASP.NET 的集成更加无缝。 (还没试过knockoutmvc.com)
-
不幸的是,我必须使用 ASP.net……我尝试了许多不同的方法来尝试将表格传回。令人沮丧的是,MVC 无法将所有模型数据传递给 POST 函数。如果是这样的话,做我需要做的就非常容易了。
标签: html sql asp.net-mvc asp.net-mvc-4 model