gpt4 book ai didi

c# - 在执行任何操作之前需要在控件上单击动态创建的链接两次吗?

转载 作者:太空宇宙 更新时间:2023-11-03 20:46:36 25 4
gpt4 key购买 nike

我有一个 aspx 页面,它有一个控件,用作同一页面上 GridView 的摘要。当页面加载时,它会创建摘要控件并动态创建链接并将事件处理程序附加到它。这是一个片段:

protected void Page_Load(object sender, EventArgs e)
{
LoadSummaries();
}

LoadSummaries() 循环遍历 GridView 的数据集并创建链接。以下是我如何创建链接并为其附加事件处理程序的片段:

LinkButton lb = new LinkButton();
lb.Text = "Dynamic Text goes here";
lb.Click += new System.EventHandler(this.Search);
lb.CommandName = "CommandName";
lb.CommandArgument = "CommandArgument";

当我运行页面时,它加载一切正常,但我需要单击链接两次才能进入搜索方法。第一次点击时,页面会重新加载,但不会进入搜索方法。第二次点击时,它会进入搜索方法。

我很好奇是不是因为在第一次点击时,它实际上将事件处理程序绑定(bind)到链接按钮,但这是在 Page_Load 中发生的,所以当页面加载时,会调用 LoadSummaries 进而绑定(bind)事件到链接按钮,所以我一直在理解为什么我需要点击它两次。

最佳答案

您是否在页面的其他地方使用了任何可能将控件注入(inject)页面的复杂控件?

我曾遇到过这样的问题,即页面中的某些控件来自将控件注入(inject)页面的库。我正在使用执行此操作的日历控件。我发生的事情是,当控件由我的代码构建时,控件 ID 似乎都很好,但就在呈现之前,工具包控件正在注入(inject)新控件,这意味着我的链接按钮的回发 URL 将自己标识为一个控件 ID,但服务器认为它应该有一个不同的控件 ID。

这导致事件处理程序与第一次回发时的控件不匹配,因此事件无法触发。然而,第二次,控件已经被注入(inject),所以我的链接按钮在其回发 URL 中有新的控件 ID,这样事件就可以触发。

解决方案 1:摆脱注入(inject)并导致问题的控件。不幸的是,并不总是一种选择。我不能这样做。

解决方案 2:摆脱 LinkBut​​ton 并使用常规链接。如果您的事件处理程序必须在该页面上,则可能无法工作。

解决方案 3:提供一个不会被其他控件更改的 ID。 (这是 Xaisoft 的解决方案)

关于c# - 在执行任何操作之前需要在控件上单击动态创建的链接两次吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/626995/

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