【发布时间】:2016-06-20 20:27:19
【问题描述】:
一些上下文。我在 Page_Load 中添加了生成转发器的类 Method1 和生成按钮数组的 Method2。 每个按钮在 Method2 中动态附加一个事件。 按钮永远不会改变,但是基于单击按钮,重复的元素应该改变。
我的主要问题是/是: 1)当我单击一个按钮时,该事件会导致页面加载(Page_Load),该页面调用 Method1,它生成默认的转发器,而不是与我的特定事件相关联的一个,该事件附加到按钮数组中的按钮 x; --> 所以,我在 !isPostBack 中封装了 Method1 ...然后,什么都没有发生
你会如何避免这种情况?你会用什么原则来实现这个?
目前尝试过:
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
GetItems(1, 2); //default values (first time the page is loaded)
GenerateButtons(10);
}
}
private void GenerateButtons(int c)
{
LinkButton[] x = new LinkButton[c];
for(int i=0; i<c;i++)
{
x[i] = new LinkButton();
x[i].Text = (i+1).ToString();
Panel1.Controls.Add(x[i]);
x[i].OnClientClick += new EventHandler(Button_Click);
}
}
protected void Button_Click(object sender, EventArgs e)
{
Button button = (Button)sender; // Which button was clicked;
GetItems(int.Parse(button.Text)-1, 3); //3 is a constant; first argument is index of button extracted from its caption
}
//单击一个按钮应该加载页面调用 GetItems() 特定于按下的按钮(第一个参数是它的索引)并且应该重新生成按钮,可能以某种方式突出显示之前按下的那个。 为了提高性能,在第一次加载页面后不重新生成按钮也会有所帮助。
我正在使用 ASP.NET 和 C#。
我的主要问题是永远不会调用 Button_Click,可能是因为在单击按钮时会重新生成按钮,因此会重新创建它们的定义,包括按钮的事件。
【问题讨论】:
-
无论如何,您的
Button_Click事件总是会在 重新生成之前触发;所以这不是问题。但是,您的问题可能在于您的x[i].OnClientClick += ...代码?不用看(而且很长时间没有使用经典 ASP 练习),您不需要连接OnClick,而不是OnClientClick事件吗? -
杰夫,感谢您的反馈。不幸的是,我使用的是没有 onClick 方法的 LinkButtons。
-
没问题。总是值得尝试帮助。一点点谷歌搜索(其他搜索引擎可用)让我找到了
.Click事件?不想看起来像在抓着稻草。举个例子,你需要让正确的点击处理程序为你的委托方法工作:) -
这太棒了。不敢相信是这样的。非常感谢杰夫。如果您想将此添加为答案,我会标记它。祝你有美好的一天!
-
我的荣幸。总是能抓住我们的简单小事!快乐编程! :)