如果我的列表在ViewBag中,如何让我的下拉列表保留所选项目?
第一个DropdownList工作正常:
@Html.DropDownList("searchString", Model.Enrollments.FirstOrDefault().WeekDays.Select(s => new SelectListItem { Text = s.ToString(), Value = s.ToString(), Selected = s.ToString().Equals(selectedItemFromList) }))
现在我想要另一个DropdownList,但不是从模型中获取列表,而是从视图包中获取它:
@Html.DropDownList("searchString", new SelectList(ViewBag.someList, "text"), "select an item").. Again this works but I want the format like the first Dropdownlist that retains te selected value…something like this…
@Html.DropDownList("searchString", ViewBag.someList.Select(t=> new SelectListItem{ Text= t.ToString(),Value =t.ToString(),Selected =t.ToString().Equals(selectedItemFromList)}))
这不起作用,因为我从我怀疑的viewbag获取我的列表。有没有办法使用ViewBag来保留我选择的列表项,如第一个示例?
答案 0 :(得分:0)
更好的方法是在控制器操作中初始化ViewBag
...
控制器
ViewBag.someList = Model.Enrollments.FirstOrDefault().WeekDays
.Select(s => new SelectListItem
{
Text = s.ToString(),
Value = s.ToString(),
Selected = s.ToString().Equals(selectedItemFromList)
}
视图
@Html.DropDownList("someList", ViewBag.someList as SelectList, "select one")
您可以在控制器端初始化选定的值。
检查HERE示例......
答案 1 :(得分:0)
此解决方案与我的解决方案相同,除非您在控制器而不是视图中实现。我能够显示我的列表但我想要的是一种在重新访问视图时保持所选列表的选定项目的方法。我的列表不是模型属性。我在控制器中创建它,然后通过viewbag将其发送到视图。我展示的第一个例子是访问列表作为模型属性。访问新列表查看viewbag。我希望它配置像我的第一个列表,它可以正常工作。自从我的原帖后,我找到了解决方案。
由于我最终需要视图中的解决方案:
@Html.DropDownList("theString", listofinstructors.Select(tch => new SelectListItem { Text = tch.ToString(), Value = tch.ToString(), Selected = tch.ToString().Equals(somethingSelected) }))