根据按钮属性

时间:2016-06-20 20:27:20

标签: c# asp.net

一些背景。我已经添加了一个类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;事件。

1 个答案:

答案 0 :(得分:0)

无论如何,你的Button_Click处理程序总是再生之前被解雇;所以这不是问题。

但是,您的问题在于x[i].OnClientClick += ...代码。

您需要与.Click的{​​{1}}事件联系以收听正确的事件。

像这样:

LinkButton

希望这有帮助!