首先有一些问题(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>
Run Code Online (Sandbox Code Playgroud)
我将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
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我会得到例外.我尝试了不同版本的这些,但没有一个可行.我尝试只使用ClearSelection但仍然得到相同的异常.是控件中的这个错误还是我想念的错误.来自其他问题的难看的解决方法是唯一的解决方案吗?
注意 - 即使删除了按钮并且所有代码都在单个事件处理程序中移动,该错误也是可重现的.只需绑定一次设置选定值并再次绑定.
Sti*_*gar 32
我已经在Connect上提交了一个关于此问题的错误.它被解决为"不会修复",在我看来它意味着它实际上是一个错误.提供了一种解决方法:
ddlTest.Items.Clear();
ddlTest.SelectedValue = null;
Run Code Online (Sandbox Code Playgroud)
我有点认为这是答案.
| 归档时间: |
|
| 查看次数: |
22182 次 |
| 最近记录: |