Прежде всего, были вопросы ( DropDownList имеет недопустимое значение SelectedValue, поскольку его нет в списке элементов , DropDownList "имеет значение SelectedValue, которое недопустимо, поскольку его нет в списке элементов" , asp: DropDownList Ошибка: «DropDownList1» имеет недопустимое значение SelectedValue, поскольку его нет в список пунктов ) по этому поводу, и есть предлагаемые обходные пути, но мой вопрос действительно ПОЧЕМУ это происходит. Более того, я не удовлетворен предлагаемыми обходными путями, и я считаю их довольно уродливыми.
Итак, есть страница с выпадающий список и кнопка:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="TestWebApplication.WebForm2" ViewStateMode="Disabled" %>
<html lang="en" >
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="ddlTest" runat="server">
</asp:DropDownList>
<asp:Button Text="Test" ID="btnTest" runat="server" onclick="btnTest_Click" />
</div>
</form>
</body>
</html>
Я связываю d dlTest с некоторыми элементами на Page_Init, а затем в btnTest_Click. Я снова выполняю привязку:
using System;
namespace TestWebApplication
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Init(object sender, EventArgs e)
{
//SelectedIndex is -1, SelectedValue is "", SelectedItem is null
ddlTest.DataSource = new[] { 1, 2, 3 };
ddlTest.DataBind();
ddlTest.SelectedValue = "3";
}
protected void btnTest_Click(object sender, EventArgs e)
{
//SelectedIndex is 2, SelectedValue is "3", SelectedItem is {3}
ddlTest.ClearSelection();
//SelectedIndex is 0, SelectedValue is "1", SelectedItem is {1}
ddlTest.SelectedIndex = -1; //Nothing changes including SelectedIndex
ddlTest.SelectedValue = ""; //Nothing changes including SelectedValue
ddlTest.Items.Clear();
//SelectedIndex is -1, SelectedValue is "", SelectedItem is null
ddlTest.DataSource = null; //Nothing changes except for the DataSource property
ddlTest.DataSource = new[] { 1, 2 };
ddlTest.DataBind();//Exception!
//'ddlTest' has a SelectedValue which is invalid because it does not exist in the list of items.
//Parameter name: value
}
}
}
Почему я получаю исключение. Я пробовал разные их версии, и ни одна из них не работает. Я пробовал использовать только ClearSelection, но все равно получилось то же исключение. Это ошибка в управлении или что-то, что я скучаю. Являются ли уродливые обходные пути от других вопросов единственным решением?
Примечание - ошибка воспроизводится, даже если кнопка удалена, а весь код перемещен в один обработчик событий. Просто выполните привязку после установки выбранного значения и повторите привязку.