我创建了一个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中项目的所有元素的内容传递给它。您可以给予任何指导。
答案 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个项目的描述。
**
**
尽管获得了这些数据。我现在正在丢失所有原始模型数据,例如Total Price,似乎传递Model.tbl_Details的部分调用只传递了该信息并清除了其余部分。 当它返回时,最终删除所有更高级别的数据。如果我注释掉部分通话,那么一切都会回来。 事实证明我仍然需要帮助.... :(