次のように、モデルのタイプのコレクションを含むViewModelがあります。
public class OrderConfirm
{
public ICollection<QuoteLine> SalesLines { get; set; }
public string Currency { get; set; }
public int EnquiryID { get; set; }
}
私のQuoteLineモデルは次のようになります。
public class QuoteLine
{
public int QuoteLineId { get; set; }
public int LostReasonId { get; set; }
public virtual LostReason LostReason { get; set; }
public string ItemName { get; set; }
}
私のビューでは、次のように、フォーム内でこれらのQuoteLineのそれぞれを繰り返し処理します。
@using (Ajax.BeginForm("ConfirmLostOrder", new AjaxOptions()
{
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "LostOrders",
OnBegin = "LostOrderConfirm"
}))
{
<table class="completed-enq-table">
<tr>
<th>
Item Number
</th>
<th>
Reason
</th>
</tr>
@foreach (var sales in Model.SalesLines)
{
<tr>
<td>@sales.ItemName
@Html.HiddenFor(model => sales.QuoteLineID)
</td>
<td>@Html.DropDownListFor(model => sales.LostReasonId, ((IEnumerable<myApp.Models.LostReason>)ViewBag.LostReasons).Select(option => new SelectListItem
{
Text = (option == null ? "None" : option.LostReason),
Value = option.LostReasonId.ToString(),
Selected = (Model != null) && (option.LostReasonId == sales.LostStatusId)
}))
</td>
</tr>
}
</table>
<input type="submit" style="float: right;" value="Submit Lost Order" />
}
次に、私のHttpPost
アクションは次のようになります。
[HttpPost]
public ActionResult ConfirmLostOrder(List<QuoteLine> models)
{
// process order
return PartialView("Sales/_ConfirmLostOrder");
}
問題は、models
がnullであるということです。を使用するFormCollection
と、送信された各値を確認できますが、FormCollectionではなくモデルを使用したいので、個別に送信された各行を処理および編集したいので、理由が異なる可能性があります。