Прежде всего возникли вопросы (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>
Я связываю ddlTest с некоторыми элементами в 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, но все же получил то же исключение. Является ли эта ошибка в контроле или что-то мне не хватает. Являются ли уродливые обходные пути из других вопросов единственным решением?
Примечание. Ошибка будет воспроизведена, даже если кнопка будет удалена, и весь код будет перемещен в одном обработчике событий. Просто привяжите один раз заданное выбранное значение и снова привяжите его.