无法在MVC4中将类属性添加到@ Html.DropDownListFor

时间:2013-10-20 09:59:54

标签: asp.net-mvc asp.net-mvc-4 razor attributes html-select

我有一个在我的项目中填充DropDownList的方法,我想在这个DropDownList中显示Color中的一些记录。为了使一些项目成为彩色,我想在将这些项目从Controller返回到View之前,将Class或其他样式属性添加到特定项目。但不幸的是,虽然属性似乎被添加到某些项目,颜色或这些项目的样式属性不能在视图中@ 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"})

正如在 this 屏幕截图中看到的那样,“class”属性及其值“disabled”从Controller返回,但它们似乎不在View的Dropdown属性上。
注意:将此属性添加到Firebug上的Option或Select标记时,它可以正常运行。因此,css类或此属性没有问题。

1 个答案:

答案 0 :(得分:0)

您必须为此编写your own HTML helper,因为Html.DropDownListFor仅处理列表项的Selected,Text和Value属性。