即使选择为真,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中没有正确高亮显示。

即使选择为真,listiitem也不会突出显示

您是否尝试了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>