[英]Populating MVC model properties with an array
在我的ASP.NET MVC Core 1.1
应用程序中使用Post method
向数据库添加记录。 只要用户从multi-select dropdown
exactly
选择3种订单类型,该方法就会成功添加记录。 用户应该从下拉列表中选择at most
3种订单类型。 因此,如果用户选择少于3个订单类型,正如预期的那样,会抛出众所周知的错误: Index was outside the bounds of the array
。 问题 :如果用户选择less than 3
订单类型,如何避免上述错误。 我想我可以将整个var oOrder = new Order{...}
语句放在if...else..
每个块中,以避免错误。 但在实际情况中,有更多的模型属性,因此在if...else...
块中重复3次会使代码看起来比实际更复杂。 有没有更好的方法呢?
[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(....);
}
更新 :
视图的快照
....
<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标记帮助程序,并经常使用@Shyju
这篇文章作为多选标记帮助@Shyju
的好例子。
您可以使用Length
属性来检查SelectedTypeIDs
列表中的项目数。
if(model.SelectedTypeIDs.Length>3){
//code
}
如果条件为false
,则可以使用ModelState.AddModelError
方法在View中显示error
。
if(model.SelectedTypeIDs.Length>3){
ModelState.AddModelError("Dropdown", "Error! You must have maximum of 3 options");
return View();
}
UPDATE
如果index
超出范围,则可以创建returns
0的generic
函数,或者创建列表项。
public static TValue GetSafe<TItem>(this IList<TItem> list,
int index, TValue defaultValue)
{
if (index < 0 || index >= list.Count)
{
return defaultValue;
}
return list[index];
}
现在您可以使用此功能来实现您的功能。
var oOrder = new Order
{
orderName = model.orderName,
StartDate = model.StartDate,
EndDate = model.EndDate,
....
....
lkupType_1_ID =model.SelectedTypeIDs.GetSafe(0, 0) ,
lkupType_2_ID =model.SelectedTypeIDs.GetSafe(1, 0) ,
lkupType_3_ID =model.SelectedTypeIDs.GetSafe(2, 0) ,
....
};
你可以试试下面,一个if
作为tenary操作:
[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.Length > 0) ? model.SelectedTypeIDs[0] : 0, // You can default it to null if it is Int?
lkupType_2_ID = (model.SelectedTypeIDs.Length > 1) ? model.SelectedTypeIDs[1] : 0,
lkupType_3_ID = (model.SelectedTypeIDs.Length > 2) ? model.SelectedTypeIDs[2] : 0,
....
};
_context.Add(oOrder);
}
return RedirectToAction(....);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.