Выпадающий список «имеет выбранное значение, которое недопустимо, поскольку оно не существует в списке элементов»

#asp.net #data-binding

#asp.net #привязка к данным

Вопрос:

У меня есть ASP.NET Выпадающий список, который я привязываю данными к списку объектов, а затем он выдает исключение. Эта ошибка сводит меня с ума, потому что сообщение неверное, и значение явно существует в списке элементов, как показано на скриншоте: введите описание изображения здесь

Вот соответствующий ASP.NET разметка:

 <asp:DropDownList ID="_ddlRequests" runat="server" AppendDataBoundItems="true" DataTextField="RequestNumber" DataValueField="RequestNumber">
    <asp:ListItem Text="" Value="" />
</asp:DropDownList>
  

Комментарии:

1. возможно ли, что в вашей коллекции есть другой элемент со значением «»?

2. Не совсем. Единственный элемент в коллекции — это тот, который я объявил в ASP.NET разметка.

3. Проверьте свой запрос и убедитесь, что объект, который вы привязываете, имеет правильные свойства. Попробуйте эту ссылку, есть много людей, у которых была такая же проблема: forums.asp.net/t/1056921.aspx/6 /…

Ответ №1:

Возможно, стоит сначала привязать данные, а затем добавить ваше пустое значение. Что-то вроде:

 _ddlRequest.Datasource = request;
_ddlRequest.DataBind();
_ddlRequest.Insert(0, new ListItem("", ""));
  

Единственная причина, по которой я предлагаю это, заключается в том, что я сталкивался с этим до и после того, как некоторое время бился головой в отчаянии, просто решил сделать это таким образом вместо этого.

Комментарии:

1. В итоге я сделал именно это 🙂

2. Я думаю, это потому, что вы указываете элемент списка в разметке. Это не существует в источнике данных, потому что вы добавляете это в разметку. Приведенный выше код от @Fishcake является хорошим способом добавления этого значения по умолчанию к указанному индексу (0). Затем вы можете установить его в качестве выбранного элемента и значения по умолчанию, используя _ddlRequest. Выбранный индекс=0;

3. Но этот метод не может обработать случай, когда несуществующий элемент не является пустым.

Ответ №2:

Вы можете использовать приведенный ниже код для очистки данных на DropDownList

 _ddlRequest.Items.Clear()