我有一个包含子模型列表的Parent模型。在视图中,我使用像这样的模板渲染孩子
@Html.EditorFor(model => model.ChildItems)
在子模型模板中,我有这个下拉列表
@Html.DropDownListFor(model => model.Quantity,
new SelectList(new[] { 1,2,3,4,5,6,7,8,9,10 }))
但我不知道如何设置所选项目。
我看到的大多数例子都是简单的控制器创建列表,设置选中并传递给视图。
除非我,否则在控制器中执行类似
的操作ViewBag["Child_1_SelectedItem"] = children[0].Quantity
ViewBag["Child_2_SelectedItem"] = children[1].Quantity
我根本没有看到我如何理解这一点。
答案 0 :(得分:1)
您通常会这样做:
var quantities = new List<SelectListItem>(new[] {
new SelectListItem {
Selected = true,
Text="1",
Value="1"
},
new SelectListItem {
Text="2",
Value="2"
}
....
然后:
@Html.DropDownListFor(model => model.Quantity, quantities)
看起来很烦人,但你可以像这样在控制器上构建它:
var q = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<SelectListItem> list = new List<SelectListItem>();
foreach (var item in q)
{
if(children[item].Quantity)// dunno what is in this property...
{//if Quantity is bool you could directly set Selected then..
list.Add(new SelectListItem { Selected = true, Text = item.ToString() });
} else {
list.Add(new SelectListItem { Text = item.ToString() });
}
}
然后将list
传递给视图。或者你可以在视图本身的@{..}
代码块中执行此操作。
答案 1 :(得分:1)
SelectList
构造函数上还有另一个重载,它接受所选项目,所以你几乎就有了第二个代码片段
int[] array = { 1, 2, 3 };
var list = new SelectList(array, 1);
鉴于此,您可以将代码更改为:
@Html.DropDownListFor(model => model.Quantity,
new SelectList(new[] { 1,2,3,4,5,6,7,8,9,10 }, model.Quantity))
编辑: 看来你无法访问第一个参数之外的lambda参数(这是有道理的),但你应该能够做到这一点(假设Model与模型的类型相同,有细微差别):
@Html.DropDownListFor(model => model.Id,
new SelectList(new[] { 1,2,3,4,5,6,7,8,9,10 }, Model.Id))
或者,使用一个简单的变量:
@{
int selectedQuantity = Model.Quantity;
}
@Html.DropDownListFor(model => model.Id,
new SelectList(new[] { 1,2,3,4,5,6,7,8,9,10 }, selectedQuantity))