gpt4 book ai didi

c# - 提交包含模型集合的表单

转载 作者:太空狗 更新时间:2023-10-30 01:23:56 26 4
gpt4 key购买 nike

我有一个 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; }
}

在我看来,我然后在一个表单中遍历每个 QuoteLines,如下所示:

@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 Action 看起来像这样:

[HttpPost]
public ActionResult ConfirmLostOrder(List<QuoteLine> models)
{
// process order
return PartialView("Sales/_ConfirmLostOrder");
}

问题是,models 为空。如果我使用 FormCollection 我可以看到每个提交的值,但我想使用我的模型而不是 FormCollection,因为我想处理和编辑单独提交的每一行可能有不同的原因

最佳答案

在这种情况下你不能使用foreach,它需要是一个for循环,以便字段的name属性包含正确的索引,以便默认模型绑定(bind)知道它绑定(bind)到列表。

首先,我要把您的下拉值从 ViewBag 中移出(它们实际上应该在里面)。这也会消除您认为的一些讨厌逻辑:)

所以你的模型现在是:

public class OrderConfirm
{
public List<QuoteLine> SalesLines { get; set; }
public string Currency { get; set; }
public int EnquiryID { get; set; }
public SelectList LostReasons { get; set; }
}

试试这个而不是你的 foreach:

@for (var i = 0; i < Model.SalesLines.Count; i++)
{
<tr>
<td>
@Model.SalesLines[i].ItemName
@Html.HiddenFor(m => m.SalesLines[i].QuoteLineId)
@Html.HiddenFor(m => m.SalesLines[i].ItemName) //assuming you want this
</td>
<td>
@Html.DropDownListFor(m => m.SalesLines[i].LostReasonId, Model.LostReasons)
</td>
</tr>
}

然后更改您的发布方法以采用您的 OrderConfirm 模型类型:

[HttpPost]
public ActionResult ConfirmLostOrder(OrderConfirm model)

关于c# - 提交包含模型集合的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10797441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com