我有一个简单的ASP.Net页面,上面有一个按钮和一个Literal Control。在按钮上单击我生成一个新的动态控件(图像按钮)并通过HtmlTextWriter将其呈现给Literal。在控件创建上,我还添加了一个未被触发的onClick事件。这是我的代码:
ASPX
<asp:Button ID="btnCreate" runat="server" Text="Create" OnClick="btnCreate_Click" />
<asp:Literal ID="lit" runat="server"></asp:Literal>
CS
public partial class _default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnCreate_Click(object sender, EventArgs e)
{
ImageButton dynBtn = new ImageButton();
dynBtn.ID = "1";
dynBtn.ImageUrl = "http://cdn.mysitemyway.com/etc-mysitemyway/icons/legacy-previews/icons/matte-blue-and-white-square-icons-symbols-shapes/118240-matte-blue-and-white-square-icon-symbols-shapes-power-button.png";
dynBtn.Click += new ImageClickEventHandler(dynBtn_click);
lit.Text = RenderControl(dynBtn);
}
private void dynBtn_click(object sender, ImageClickEventArgs e)
{
Page.Response.Write("hello!");
}
private string RenderControl(Control control)
{
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter writer = new HtmlTextWriter(sw);
control.RenderControl(writer);
return sb.ToString();
}
}
创建控件时没有任何错误,但事件未触发。
答案 0 :(得分:0)
试试这个
completion_list = [(pair[0], pair[1]) for pair in completion_list]
答案 1 :(得分:0)
将您的ImageButton添加到ASP.NET容器将使您的生活更轻松,并且更符合框架中的操作方式。您可以将按钮添加到不同类型的Web控件,具体取决于所需的HTML容器类型。
选项1 - PlaceHolder
PlaceHolder不会呈现为HTML元素。其输出仅包含已添加到其中的控件。在这里介绍的3个容器控件中,它与Literal控件最相似。
<asp:PlaceHolder ID="container" runat="server" />
选项2 - 面板
Panel被渲染为div
元素。
<asp:Panel ID="container" runat="server" />
选项3 - 标签
标签呈现为span
元素。
<asp:Label ID="container" runat="server" />
添加控件
可以在代码隐藏中使用以下语句将ImageButton添加到上面提到的3种类型的ASP.NET容器中的任何一种:
container.Controls.Add(dynBtn);