用css&添加按钮Page_Load中的eventhandlers

时间:2012-10-31 18:35:54

标签: asp.net event-handling asp.net-placeholder

我试图将按钮添加到占位符,每个占位符都使用相同方法的事件处理程序。

        if (!this.IsPostBack)
        {

                foreach (Entry ent in results)
                {
                    HtmlButton btn = new HtmlButton();
                    btn.ServerClick += new EventHandler(resultSelected);
                    btn.InnerText = ent.name;
                    btn.ID = ent.ID.ToString();
                    PlaceHolder1.Controls.Add(btn);
                }
       }

1) 该按钮被添加到页面中,但是当它被单击时,不会调用方法(resultSelected),只会再次调用Page_Load。当它进入Page_Load时,PlaceHolder为空(该按钮不显示在页面上)。我如何完成我试图做的事情?

2)如何将CSS类分配给以这种方式创建的按钮?

1 个答案:

答案 0 :(得分:2)

当您第一次开始使用ASP.NET时,这是一个非常常见的问题 - 在服务器端添加动态控件。

  1. 首先,您必须添加这些控件并在每个页面请求上分配eventhandler - 在每次回发时也是如此。要正确处理事件并恢复ViewState,必须为它们分配相同的ID并应用相同的层次结构。
  2. 需要在Page Load事件之前添加控件 - 最方便的是在覆盖CreateChildControls()方法中添加它们,该方法在Postback方法之前在OnLoad上触发。
  3. 在OnLoaded方法之后触发事件,因此如果您将在例如OnPreRender / Render方法中创建任何控件,则不会触发任何事件。
  4. 这是最简单的方法,在我的描述中跳过了一些细节。有关更多详细信息,请阅读ASP.NET应用程序生命周期。

    至于问题的第二部分,您可以使用Style Property使用显式样式设置,也可以使用Attributes Property添加类属性,但是现在我猜测,因为我认为HtmlButton没有CssClass属性。