以下Post method
在我的ASP.NET MVC Core 1.1
应用程序中向数据库添加记录。只要用户从multi-select dropdown
中选择exactly
3种订单类型,该方法就会成功添加记录。用户应该从下拉列表中选择3种订单类型。因此,如果用户选择少于3个订单类型,则如预期的那样,将引发众所周知的错误:Index was outside the bounds of the array
。 问题:如果用户选择less than 3
订单类型,如何避免上述错误。我想我可以将整个var oOrder = new Order{...}
声明放在if...else..
的每个块内,以避免错误。但在实际情况下,有更多的模型属性,因此在if...else...
块中重复它们3次会使代码看起来比实际更复杂。有没有更好的方法来做到这一点?使用数组填充MVC模型属性
[HttpPost]
public IActionResult AddOrder(OrderViewModel model)
{
if (ModelState.IsValid)
{
var oOrder = new Order
{
orderName = model.orderName,
StartDate = model.StartDate,
EndDate = model.EndDate,
....
....
lkupType_1_ID = model.SelectedTypeIDs[0],
lkupType_2_ID = model.SelectedTypeIDs[1],
lkupType_3_ID = model.SelectedTypeIDs[2],
....
};
_context.Add(oOrder);
}
return RedirectToAction(....);
}
UPDATE:
快照视图的
....
<div>....</div>
....
<div class="form-group">
<label asp-for="SelectedOrderTypeIDs"></label>
<div class="col-md-10">
<select asp-for="SelectedOrderTypeIDs" asp-items="Model.lstOrderTypes"></select>
</div>
</div>
<button type="submit" name="submit">Add Order</button>
注意:我使用ASP.NET MVC tag helpers和经常使用this post从@Shyju
为很好的例子多选标签帮手。
你如何建立你的看法?默认的模型绑定器在发布的模型中需要不间断的索引,所以如果你没有发布正确的表单值,你的模型将不能正确绑定。 –
@ TiesonT.I've添加了更新到我的文章来回答你的问题。请记住,代码在从下拉列表中选择3'项时工作正常 – nam
这是标签助手中的表单吗?根据你的助手是如何嵌套的,如果你使用强类型的助手,它们应该生成隐藏的表单输入,这将确保(对于集合类型属性)索引从0开始连续。 –