即使选择为真,listiitem也不会突出显示
本文关键字:显示 listiitem 选择 | 更新日期: 2023-09-27 18:06:01
我正在为列表框创建月份列表。控制器捕获选定的月份并将其存储在会话中,以便用户离开页面然后返回。
这是控制器:
public ActionResult Index(int[] Months)
{
if (Session["Months"] == null || Months!= null)
Session["Months"] = Months;
else if (Months== null)
Months= Session["Months"] as int[];
IList<SelectListItem> MonthsList = utility.GetMonths().OrderBy(r => r.Name)
.Select(r => new SelectListItem
{
Text = r.Name,
Value = r.Id.ToString(),
Selected = Months == null ? false : Months.Contains(r.Id)
}).ToList();
var model = new DataModel
{
SelectList = MonthsList,
Data = GetDataByMonths(Months)
};
return (model);
}
视图如下:
@Html.ListBox("Months", Model.SelectList)
当用户从ListBox中选择项目时,即使表单已经提交,它们也会高亮显示。然而,当用户导航离开,然后返回SelectListItems被正确地标记为Selected = true,但DOM没有显示这一点。
关于为什么这只在使用会话时不起作用的任何想法?
编辑:尝试:
@Html.ListBox("Months", new MultiSelectList(Model.Months, "Value", "Text", Model.SelectedMonths), new { size = 8 })
在调试时,变量显示了正确的值,只是在DOM中没有正确高亮显示。
您是否尝试了SelectList
类型或MultiSelectList
而不是IEnumerable<SelectListItem>
?我不知道还有什么其他方法可以告诉ListBox哪个属性是value
,哪个是text
。
。
MultiSelectList list = new MultiSelectList(monthsList, "Value", "Text");
并返回list
对象?
我最终在html中创建了列表框,而不是使用@html.listbox()
<select name="Months" id="Months" multiple="multiple" size="8">
@foreach (var a in Model.Months)
{
<option value="@a.Value" @(a.Selected.ToString() == "True" ? "selected='selected'" : "")>@a.Text</option>
}
</select>