DropDownList веб-форм ASP.NET имеет значение SelectedValue, которое недействительно, поскольку его нет в списке элементов.

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

Примечание - ошибка воспроизводится, даже если кнопка удалена, а весь код перемещен в один обработчик событий. Просто выполните привязку после установки выбранного значения и повторите привязку.

16
задан Community 23 May 2017 в 11:45
поделиться