为什么在设置SelectedItem时,我的MVC3应用程序中的Dropdownlist被禁用?

时间:2012-09-24 22:57:10

标签: asp.net-mvc-3

我有一个MVC3应用程序,我将视图定义为可以传递值并设置SelectedItem值。

List<SelectListItem> items = new SelectList(db.BILLING_COUNTRY, "ISO_Code_BillingCountry", "CountryName", Country).AsParallel().ToList();
        items.Insert(0, (new SelectListItem { Text = "Select Your Country", Value = "0" }));
        ViewBag.Countries = items;

如果ViewBag.EnableDropDowns为false或未设置,我在下拉列表中设置disabled =“disabled”属性。

@{ object displayMode = (ViewBag.EnableDropDowns) ? null : new { disabled = "disabled"     };
           @Html.DropDownList("Countries", null, new { disabled = displayMode, onchange     = "LoadItems()" } )
        }

我将ViewBag.EnableDropDowns设置为true,它正确设置了下拉列表中的所有值,但它们被禁用而不是启用。

有什么问题?

3 个答案:

答案 0 :(得分:0)

我认为您需要设置enabled="enabled"

尝试:

    @{
        bool displayMode = (ViewBag.EnableDropDowns) ? "enabled": "disabled";                     
     };

   @if(displayMode)
   {
     Html.DropDownList("Countries", null, 
      new { enabled= displayMode, onchange="LoadItems()" } );
   }
   else
   {
      Html.DropDownList("Countries", null, 
      new { disabled= displayMode, onchange="LoadItems()" } );
   }

答案 1 :(得分:0)

如果select属性完全存在,则disabled元素将被禁用(无论其值如何)。所以你需要这样的东西(将htmlAttributes指定为字典而不是匿名对象,因为在这种情况下它似乎更方便):

@{ 
    var displayMode = new Dictionary<string,object>();
    displayMode.Add("onchange", "LoadItems()");
    if (ViewBag.EnableDropDowns) displayMode.Add("disabled", "disabled");
}

@Html.DropDownList("Countries", null, displayMode)

答案 2 :(得分:0)

小心字典声明。它必须是Dictionary<string, object>()否则您将面临运行时问题。

我必须根据条件禁用列表框。

@{
var sourceListOptions = new Dictionary<string, object>();
sourceListOptions.Add("style", "Height: 250px; width: 225px;");
if (Model.SourceColumns.Count() == Model.ImportMappings.Count())
{
    sourceListOptions.Add("disabled", "disabled");
}

}

@Html.ListBox("SourceColumns", Model.SourceColumns, sourceListOptions)

@Html.DropDownList("SourceColumns", Model.SourceColumns, sourceListOptions)