即使selected为true,ListItem也不会突出显示

时间:2014-05-30 14:07:41

标签: c# .net asp.net-mvc-3 listbox

我正在为列表框创建月份列表。控制器捕获所选月份并将其存储在会话中,如果用户导航离开页面然后返回。

这是控制器:

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中没有正确突出显示。

2 个答案:

答案 0 :(得分:0)

您是否尝试过SelectList类型或MultiSelectList而不是IEnumerable<SelectListItem>?我不知道有任何其他方法告诉ListBox哪个属性是value,哪个是text

MultiSelectList list = new MultiSelectList(monthsList, "Value", "Text");

并返回list对象?

答案 1 :(得分:0)

我最终在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>