我有一個視圖模型包含我的模型的列表,像這樣:綁定我的表單模型
public class OrderConfirm
{
public ICollection<DayBookQuoteLines> SalesLines { get; set; }
public ICollection<DayBookQuoteLines> LostLines { get; set; }
public string Currency { get; set; }
}
然後我用這個視圖模型在我看來,像這樣:
@model btn_intranet.Areas.DayBook.Models.ViewModels.OrderConfirm
@{
ViewBag.Title = "Daybook - Order Confirmation";
}
<h6>Sales Lines</h6>
<div id="SalesOrders">
@using (Ajax.BeginForm("ConfirmSalesOrder", new AjaxOptions()
{
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "SalesOrders",
OnBegin = "SalesOrderConfirm"
}))
{
@foreach(var item in Model.SalesLines)
{
<p>@item.ItemName</p>
<p>@item.Qty</p>
@* Other Properties *@
}
<input type="submit" value="Submit Sales Order" />
}
</div>
<h6>Lost Lines</h6>
<div id="LostOrders">
@using (Ajax.BeginForm("ConfirmLostOrder", new AjaxOptions()
{
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "LostOrders",
OnBegin = "LostOrderConfirm"
}))
{
@foreach(var item in Model.SalesLines)
{
<p>@item.ItemName</p>
<p>@item.Qty</p>
@* Other Properties *@
}
<input type="submit" value="Submit Lost Order" />
}
</div>
的問題是,在我的[HttpPost]
操作中,都是ConfirmSalesOrder
和ConfirmLostOrder
。作爲參數傳遞的我的模型的值爲空:
[HttpPost]
public ActionResult ConfirmSalesOrder(List<DayBookQuoteLines> quoteLines)
{
// Process order...
return PartialView("Sales/_ConfirmSalesOrder");
}
因此quoteLines
爲空。如何將表單綁定到我的模型?
的問題是,我拿來他們在GET請求的方式是將它們保存在TempData中,因爲我實際上沒有對數據庫進行任何更改,因爲View是一種Confirmation Page,它將在點擊提交後將更改提交到數據庫 – CallumVass
在這種情況下,您必須提供隱藏爲每個要保留的屬性添加字段。最好的方法是在整個編輯器模板中執行此操作,以確保爲這些隱藏字段生成專有名稱。沒有奇蹟。 HTTP協議本質上是無狀態的。有人可能會建議你使用會話而不是TempData。我個人不會使用它,也不推薦它。 –
我用另一種可以使用的技術更新了我的答案。它包括將模型序列化爲一個JavaScript變量,您可以在發送AJAX請求時重新發送給控制器操作。 –