从动态内容回发

时间:2014-09-03 01:01:17

标签: c# asp.net .net webforms webusercontrol

我正在使用HtmlGenericControl()在WebForms页面上动态构建一些HTML内容。

HtmlGenericControl p = new HtmlGenericControl("p");
// ...
ListItems.Controls.Add(p);

但现在我需要在上面创建的段落中添加一个按钮,按钮需要在点击时进行回发。

我是否必须完全重写此代码以加载子控件,其中可能包含真正的服务器端按钮?或者有没有办法注入能够进行某种回发的按钮?

1 个答案:

答案 0 :(得分:1)

这是一个测试方法和测试EventHandler,如果调用它,它将向ListItems添加一个带有服务器端Click事件的按钮控件。如果InnerHtml可用,注释掉的代码将更改ListItems对象的标记,但我重新考虑该方法并假设页面上存在一个文本框,该文本框将显示点击事件触发的结果。如果您需要将这些子控件从一个回发存在到另一个回发中,那么您将需要处理许多问题,例如,如果每次页面加载该按钮时都不调用Test()除非其他控件也调用它,否则将无法调用其EventHandler。

      public void Test()
    {
        System.Web.UI.HtmlControls.HtmlGenericControl p = new System.Web.UI.HtmlControls.HtmlGenericControl("p");
        p.InnerHtml = @"<strong>Test</strong>";
        // ...
        ListItems.Controls.Add(p);
        Button b = new Button();
        b.ID = "cmdTest";
        b.Text = "Test";
        b.Click += new EventHandler(test_Click);
        p.Controls.Add(b);
    }

    protected void test_Click(object sender, EventArgs e)
    {
       // ListItems.InnerHtml = "Test button clicked";
        txtTestResults.Text = "Test button clicked at " + DateTime.Now.ToShortTimeString();
    }