我想禁用ItemList
的某些成员。我尝试了以下代码的变体,但似乎没有任何效果。我希望将禁用的Items
保留在list
中,但要设为灰色。我在这个主题上似乎有类似的帖子,但是似乎没有任何作用。
List<SelectListItem> selectitem = new List<SelectListItem>();
selectitem.Add(new SelectListItem { Text = "Select", Value = "-1", Disabled = false });
while (reader.Read())
{
string displayText = "TextTest";
string displayValue = "ValueTest";
selectitem.Add(new SelectListItem { Text = displayText, Value = displayValue, Disabled = true });
}
EstimateDropDownList.DataSource = selectitem;
EstimateDropDownList.DataTextField = "Text";
EstimateDropDownList.DataValueField = "Value";
EstimateDropDownList.DataBind();
...
internal class SelectListItem
{
public string Text { get; set; }
public string Value { get; set; }
public bool Disabled { get; set; }
}
...
<asp:DropDownList ID="EstimateDropDownList" runat="server" Width="200px" Height="27px"
AutoPostBack="true" OnSelectedIndexChanged="EstimateDropDownList_SelectedIndexChanged">
</asp:DropDownList>
我也尝试过这种方法,但这也不起作用。
EstimateDropDownList.DataSource = selectitem;
foreach (ListItem item in EstimateDropDownList.Items)
{
if (true)
{
item.Attributes.Add("disabled", "disabled");
}
}
EstimateDropDownList.DataTextField = "Text";
EstimateDropDownList.DataValueField = "Value";
EstimateDropDownList.DataBind();
答案 0 :(得分:0)
下拉菜单是带有“ option”元素的“ select”控件。在大多数浏览器中,您只能禁用(或上色)控件本身,而不能禁用特定的“选项”。在过去,这有点不同。 如果您确实想这样做,可以使用许多现成的JS Dropdown控件甚至引导程序,它们可以以一种非常不错的方式实现。
答案 1 :(得分:0)
好像我错了。有一个选项可以禁用HTML中的特定选择选项。参见此处:https://www.w3schools.com/tags/tag_option.asp
例如,请参见此下拉列表:
<select>
<option value="volvo">Volvo</option>
<option value="saab" disabled>Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
要利用这一点:
ListItemCollection lic = new ListItemCollection();
lic.Add(new ListItem("first", "1"));
lic.Add(new ListItem("second", "2", false));
lic.Add(new ListItem("third", "3"));
foreach(ListItem li in lic)
{
//create a new list item, because otherwise it will skip disabled items.
ddl.Items.Add(new ListItem(li.Text, li.Value));
if(li.Enabled == false)
{
ddl.Items[ddl.Items.Count - 1].Attributes.Add("disabled", "");
}
}
这是一个很奇怪的解决方法,因为asp.net控件应该知道如何生成Disabled属性。我不知道为什么会这样,但是可能有一个合理的原因。我肯定会以不同的方式执行此操作,要么通过播放文本,签入回发邮件,要么仅保留禁用的选项。显然,这并不是要这样。