1

我有一个在我的项目中填充 DropDownList 的方法,我想在这个 DropDownList 中以 Color 显示一些记录。为了使某些项目有颜色,我想在将这些项目从控制器返回到视图之前为某些项目添加类或其他样式属性。但是,不幸的是,虽然该属性似乎已添加到某些项目,但这些项目的颜色或样式属性无法在 View 中的 @Html.DropDownListFor 上观察到,并且在填充后检查 DropDownList 时,没有这种类型属性既不选择也不选择选项标签。您能否看看下面的代码并告诉我如何在不使用 JQuery 或其他技术的情况下解决问题?提前致谢。

控制器:

private void PopulateMeetingsDropDownList(object selectedMeetings = null)
{
    var meetingsQuery = repository.Meetings
        .Join(repository.Cities, m => m.MeetingCityId, c => c.CityID,
            (m, c) => new
            {
                CityID = c.CityID,
                CityName = c.CityName,
                MeetingDate = m.MeetingStartDate
            }
        )
        .OrderBy(x => x.CityID)
        .AsEnumerable()
        .Select(
            i => new
            {
                CityID = i.CityID,
                DisplayValue = string.Format(
                    "{0} ({1:dd MMMM yyyy})",
                    i.CityName, i.MeetingDate),
                    Expired = i.MeetingDate < DateTime.UtcNow
            }
        ).ToList();

    //Here is the code for check and add Styling Attributes
    var selectItems = new List<System.Web.UI.WebControls.ListItem>(meetingsQuery.Count);
    foreach (var record in meetingsQuery)
    {
        var item = new System.Web.UI.WebControls.ListItem
        {
            Text = record.DisplayValue,
            Value = record.CityID.ToString()                  
        };
        if (record.Expired)
        {
            item.Attributes.Add("class", "disabled");
            //item.Attributes.Add("style", "color:#4cff00");
        }
        selectItems.Add(item);
    }  
    ViewData["MeetingId"] = new SelectList(selectItems, "Value", "Text", selectedMeetings);
}


看法:

@Html.DropDownListFor(m => m.MeetingId, ViewData["MeetingId"] as SelectList,"Select", 
        new { name = "meetingId", id = "meetingId"})

正如在屏幕截图中所见,“类”属性及其值“已禁用”从控制器返回,但它们似乎不在视图的下拉属性中。
注意:当将此属性添加到 Firebug 上的 Option 或 Select 标记时,它可以正常工作。所以,css类或者这个属性没有问题。

4

1 回答 1

0

您必须为此编写自己的 HTML 帮助程序,因为 Html.DropDownListFor 仅处理列表项的 Selected、Text 和 Value 属性。

于 2013-10-20T12:52:42.560 回答