linkbuttons行为回发与非回发

时间:2016-06-21 05:38:20

标签: c# asp.net

您能否帮我理解为什么在下面的示例首次加载页面时,按钮无法正常工作,例如按钮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)运行之前。不是预期的

2 个答案:

答案 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/