您能否帮我理解为什么在下面的示例首次加载页面时,按钮无法正常工作,例如按钮2不会调用GetItems(int.Parse("2"), 3);
而是调用GetItems(int.Parse("4"), 3);
但是在第一次回发后,所有按钮都正常工作,例如Buttonx调用GetItems(int.Parse("x"), 3);
感谢
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
GetItems(1, 2); //default values (first time the page is loaded)
}
GenerateButtons(5);
}
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].OnClick += 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), 3); //3 is a constant; first argument is index of button extracted from its caption
}
PS。当我提到按钮1时,我记得button[0]
。 button2=button[1]
等等。在回发button1
正确附加到事件后触发GetItems(1,3)
。在回发button1导致GetItems(3,3)
运行之前。不是预期的
答案 0 :(得分:2)
使用Page_Init,以便它可以在第一次加载时使用
protected void Page_Init(object sender, EventArgs e)
{
GenerateButtons(5);
}
来源:json
module
Init
在初始化所有控件和任何皮肤后引发 设置已应用。单个控件的Init事件 发生在页面的Init事件之前。使用此事件阅读或 初始化控件属性
答案 1 :(得分:1)
动态创建控件时,请在Page_PreInit
而非Page_Load
protected void Page_PreInit(object sender, EventArgs e)
{
GenerateButtons(5);
}
本文解释并将帮助您
http://www.robertsindall.co.uk/blog/dynamically-adding-web-controls/