ASP.NET Web窗体DropDownList具有SelectedValue,因为它不存在于项目列表中,因此无效

首先有一些问题( DropDownList has a SelectedValue which is invalid because it does not exist in the list of itemsDropDownList “has a SelectedValue which is invalid because it does not exist in the list of items”asp:DropDownList Error: ‘DropDownList1’ has a SelectedValue which is invalid because it does not exist in the list of items)关于这个问题,并提出了解决方法,但我的问题是真的为什么发生这种情况。更重要的是,我对建议的解决方法不满意,我觉得他们很丑陋。

所以有一个页面一个下拉列表和一个按钮:

<%@ 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,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,但仍然有相同的异常。这个错误在控制或我想念的东西。其他问题的难处理解决方案是唯一的解决方案吗?

注意 – 即使删除按钮并且所有代码都在单个事件处理程序中移动,该错误也是可重现的。只要绑定一次设置所选值并再次绑定。

解决方法

我在Connect上提交了一个错误。它被解决为“不会修复”,这在我看来意味着它实际上是一个错误。提供了解决方法
ddlTest.Items.Clear();
ddlTest.SelectedValue = null;

https://connect.microsoft.com/VisualStudio/feedback/details/666808/asp-net-dropdownlist-selectedvalue-is-persisted-which-results-in-exception-if-the-control-is-databound-second-time

我想这个答案。

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....