一些背景。我已经添加了一个类Method1的Page_Load,它生成一个转发器,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,可能是因为单击按钮时会重新生成按钮,因此会重新创建其定义,包括按钮&#39;事件。
答案 0 :(得分:0)
无论如何,你的Button_Click
处理程序总是在再生之前被解雇;所以这不是问题。
但是,您的问题在于x[i].OnClientClick += ...
代码。
您需要与.Click
的{{1}}事件联系以收听正确的事件。
像这样:
LinkButton
希望这有帮助!