我正在使用HtmlGenericControl()
在WebForms页面上动态构建一些HTML内容。
HtmlGenericControl p = new HtmlGenericControl("p");
// ...
ListItems.Controls.Add(p);
但现在我需要在上面创建的段落中添加一个按钮,按钮需要在点击时进行回发。
我是否必须完全重写此代码以加载子控件,其中可能包含真正的服务器端按钮?或者有没有办法注入能够进行某种回发的按钮?
答案 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();
}