Проблема “DropDownList.SelectedIndex = -1”
-
09-06-2019 - |
Вопрос
Мне просто нужен выпадающий список ASP.NET без выбранного элемента.Установка SelectedIndex в значение -1 пока безрезультатна.Я использую Framework 3.5 с AJAX, т.е.этот выпадающий список находится в панели обновлений.Вот что я делаю:
protected void Page_Load (object sender, EventArgs e)
{
this.myDropDownList.SelectedIndex = -1;
this.myDropDownList.ClearSelection();
this.myDropDownList.Items.Add("Item1");
this.myDropDownList.Items.Add("Item2");
}
В тот момент, когда я добавляю элемент в выпадающий список, его SelectedIndex изменяется на 0 и больше не может быть установлен в значение -1 (я также пробовал вызывать SelectedIndex после добавления элементов)...Что я делаю не так?Мы были бы признательны за любую помощь!
Решение
Имейте в виду myDropDownList.Товары.Add добавит новый элемент Listitem внизу, если вы вызовете его после выполнения вызова DataSource / DataBind, поэтому используйте myDropDownList.Товары.Вставить метод вместо, например...
myDropDownList.DataSource = DataAccess.GetDropDownItems(); // Psuedo Code
myDropDownList.DataTextField = "Value";
myDropDownList.DataValueField = "Id";
myDropDownList.DataBind();
myDropDownList.Items.Insert(0, new ListItem("Please select", ""));
Добавит выпадающий список "Пожалуйста, выберите" вверху.
И, как уже упоминалось, в выпадающем списке всегда будет выбран ровно один элемент (я полагаю, что списки разные), и по умолчанию используется верхний элемент, если ни один из них не выбран явно.
Другие советы
Это можно установить Выбранный индекс свойство Выпадающий список до -1 (i.e.очистить выделение) с использованием клиентского скрипта:
<form id="form1" runat="server">
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem Value="A"></asp:ListItem>
<asp:ListItem Value="B"></asp:ListItem>
<asp:ListItem Value="C"></asp:ListItem>
</asp:DropDownList>
<button id="СlearButton">Clear</button>
</form>
<script src="jquery-1.2.6.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function()
{
$("#СlearButton").click(function()
{
$("#DropDownList1").attr("selectedIndex", -1); // pay attention to property casing
})
$("#ClearButton").click();
})
</script>
Я читаю следующее:http://msdn.microsoft.com/en-us/library/a5kfekd2.aspx
В нем говорится:Чтобы получить значение индекса выбранного элемента, прочитайте значение свойства SelectedIndex.Индекс основан на нуле.Если ничего не было выбрано, значение свойства равно -1.
В то же время, в http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.dropdownlist.selectedindex(VS.80).aspx мы видим:
Используйте свойство SelectedIndex, чтобы программно указать или определить индекс выбранного элемента из элемента управления DropDownList.Элемент управления всегда выбирается в выпадающем списке.Вы не можете удалить выделение из каждого элемента в списке одновременно.
Возможно, значение -1 допустимо только для получения, а не для установки индекса?Если это так, я буду использовать ваш "патч".
Я почти уверен, что в выпадающем списке должен быть выбран какой-то элемент;Обычно я добавляю пустой элемент списка
this.myDropDownList.Элементы.Добавить("");
В качестве моего первого элемента списка и действуйте соответствующим образом.
SelectedIndex может быть равен -1 только при первой инициализации элемента управления и отсутствии элементов в коллекции.
Невозможно, чтобы ни один элемент не был выбран в веб-выпадающем списке, как это было бы в WinForm.
Я считаю, что лучше всего иметь:this.myDropDownList.Товары.Добавить(новый список("Пожалуйста, выберите ...", ""));
Таким образом, я сообщаю пользователю, что ему нужно выбрать элемент, и вы можете проверить SelectedIndex == 0 для проверки
- Создайте свой выпадающий список и укажите начальный элемент списка
- Установленный
AppendDataBoundItems
Дляtrue
таким образом, будут добавлены новые элементы.
<asp:DropDownList ID="YourID" DataSourceID="DSID" AppendDataBoundItems="true"> <asp:ListItem Text="All" Value="%"></asp:ListItem> </asp:DropDownList>
Пожалуйста, попробуйте приведенный ниже синтаксис:
DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue("Select"))
или
DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByText("SelectText"))
или
DropDownList1.Items.FindByText("Select").selected =true
Для получения дополнительной информации :http://vimalpatelsai.blogspot.in/2012/07/dropdownlistselectedindex-1-problem.html