gpt4 book ai didi

c# - 在没有数据源的情况下加载时,DropDownList 不会触发其 SelectedIndexChanged

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:41 27 4
gpt4 key购买 nike

今天我发现了一个奇怪的问题,我试图触发一个 DropDownList SelectedIndexChanged 事件,但它根本不起作用。在检查了其他 DropDownLists 之后,我注意到唯一的区别是它们是使用数据源填充的,而这个是在后端手动填充的。

这是我的:

<asp:DropDownList ID="DDDynAccount" runat="server" 
onselectedindexchanged="DDDynAccount_SelectedIndexChanged"
AutoPostBack="true"></asp:DropDownList>

然后加载时的Backcode:

DDDynAccount.Items.Add(new ListItem("ANY", "%"));
DDDynAccount.Items.Add(new ListItem("SELECT", "%"));

未触发的事件:

public void DDDynAccount_SelectedIndexChanged(object sender, EventArgs e) {
string s = ""; // I have a breackpoint here
}

如果我这样做,事件永远不会被触发。我试过打开和关闭 AutoPostBack。没有什么。我试过从头开始制作一个新控件。没有什么。一旦我手动添加了它的项目但没有使用数据源,我也尝试调用 Databind() 。还是什么都没有。

我在同一页面中有另一个 DropDownList 可以正常工作。唯一的区别是那个正在使用数据源。所以我尝试了这个:

    List<ListItem> ds = new List<ListItem>();
ds.Add(new ListItem("ANY", "%"));
ds.Add(new ListItem("SELECT", "%"));
DDDynAccount.DataSource = ds;
DDDynAccount.DataBind();

这会奏效。

我的问题很简单。 为什么? 如果我不使用数据源,为什么不能触发事件?还是有其他问题?


我在 Web 应用程序中使用 .Net4 和 C#。


更新:好的,我对此感到抱歉,但是,在检查此处编写的代码后,我意识到了一些细节,我手动添加的项目具有相同的值,更改它,问题就解决了。我假设事件没有被触发,因为值没有改变,尽管“SelectedIndexChanged”应该不是在值改变时触发,而是在索引改变时触发。

最佳答案

两项具有相同的值,因此当您选择第二项时默认选择第一项,因此下拉列表的值不会改变,只要代码是担心什么都没有改变,也无事可做。

改为使用这样的代码:

DDDynAccount.Items.Add(new ListItem("ANY", "%%"));
DDDynAccount.Items.Add(new ListItem("SELECT", "%"));

会很好地触发事件。

这实际上是 .NET 的错误 - 它只适用于 value 假设它是唯一的,而不适用于项目索引。

作为旁注,为了避免每次回发添加越来越多的项目,请用这样的语句包装添加:

if (!Page.IsPostBack)
{
DDDynAccount.Items.Add(new ListItem("ANY", "%%"));
DDDynAccount.Items.Add(new ListItem("SELECT", "%"));
}

编辑:很好奇你说它与绑定(bind)数据源一起工作得很好所以我自己试了一下。好吧,数据源也失败了。使用您发布的代码:

List<ListItem> ds = new List<ListItem>();
ds.Add(new ListItem("ANY", "%"));
ds.Add(new ListItem("SELECT", "%"));
DDDynAccount.DataSource = ds;
DDDynAccount.DataBind();

快速查看 HTML 源代码显示每个选项的 value 实际上是它的文本 - ANYSELECT 而不是你的值试图分配。要分配正确的值,您需要这样的代码:

List<ListItem> ds = new List<ListItem>();
ds.Add(new ListItem("ANY", "%"));
ds.Add(new ListItem("SELECT", "%"));
DDDynAccount.DataTextField = "Text";
DDDynAccount.DataValueField = "Value";
DDDynAccount.DataSource = ds;
DDDynAccount.DataBind();

您将遇到与逐一分配项目相同的问题,因为现在值将相同。

关于c# - 在没有数据源的情况下加载时,DropDownList 不会触发其 SelectedIndexChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8242282/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com