【问题标题】:reload the page on button click based on button properties根据按钮属性在按钮单击时重新加载页面
【发布时间】: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 方法的 LinkBut​​tons。
  • 没问题。总是值得尝试帮助。一点点谷歌搜索(其他搜索引擎可用)让我找到了.Click 事件?不想看起来像在抓着稻草。举个例子,你需要让正确的点击处理程序为你的委托方法工作:)
  • 这太棒了。不敢相信是这样的。非常感谢杰夫。如果您想将此添加为答案,我会标记它。祝你有美好的一天!
  • 我的荣幸。总是能抓住我们的简单小事!快乐编程! :)

标签: c# asp.net


【解决方案1】:

无论如何,您的Button_Click 处理程序总是会在重新生成之前被触发;所以这不是问题。

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

您需要连接到LinkButton.Click 事件才能监听正确的事件。

像这样:

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].Click += new EventHandler(Button_Click); // Use the 'Click' event

    }
}

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2017-04-30
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    相关资源
    最近更新 更多