我已经创建了一个MVC5应用程序,其中我正在创建一个自定义的购买系统。
My View模型是基于SQL数据库的内容生成的。数据库对包含一些基本数据的采购订单使用单个主键。除了基本数据外,每个PO在该采购订单中还可以有多个项目。这创建了一种关系,其中一次购买可以有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一起使用。所有这些都可以很好地显示部分,直到我想在子表中发布多个项目。
对我来说,处理这个问题最简单的方法是在显示期间将model的所有内容传递给POST函数。
如果您能给出任何指导,我们将不胜感激。
发布于 2017-03-23 22:10:26
我已经解决了我自己的问题,这就改变了.
要在子表(IQueryable)中发布数据,我必须执行以下操作
在我的主要html代码中添加
@foreach(var item in Model.PurchaseOrder.tbl_Details)
{
@Html.Partial("_POItemDetailsPartial", item)
}然后,我不得不创建一个名为_POItemsPartial的MVC Page (Razor)。
在该页中,我放入了以下内容..
@using (Html.BeginCollectionItem("Model.PurcahseOrder.tbl_Details")
{
@model ModelSpace.Model.tbl_Details
@Html.TextBoxFor(m => m.Description)
}当POST操作发生时,我现在获得了PurchaseOrder中所有3个项目的描述。
**
更新:
**
尽管获得了这些数据,但我现在正在丢失所有原始模型数据,例如总价格,似乎传递的部分调用Model.tbl_Details只是传递了该信息,并清除了其余部分。当它返回时,它最终删除了所有更高级别的数据。如果我注释掉部分调用,它就会全部返回。事实证明我仍然需要帮助...:(
https://stackoverflow.com/questions/42955774
复制相似问题