2016-04-28 8 views
0

Ich habe eine einfache ASP.Net-Seite mit einer Schaltfläche und einem Literal Control darauf. Auf Knopfdruck erzeuge ich ein neues dynamisches Steuerelement (imagebutton) und rende es über HtmlTextWriter auf das Literal. Bei der Erstellung von Steuerelementen füge ich auch ein onClick-Ereignis hinzu, das nicht ausgelöst wird. Hier ist mein Code:Dynamisch erstellt Steuerelement gerendert über HtmlTextWriter löst keine Ereignisse

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(); 
    } 
} 

Die Steuerung wird ohne Fehler erstellt zu werden, aber das Ereignis fireing nicht.

+0

versuchen, die Kontrolle zu Literal statt Text – techspider

Antwort

0

Versuchen Sie, diese

lit.Controls.Add(dynBtn); 
+0

hinzufügen einige weitere Informationen darüber, warum Sie denken, dies hilft, wird zukünftigen Benutzern helfen – TheGameiswar

+0

Dies funktioniert nicht, weil Literas keine Untersteuerungen wie page.controls.add (Mycontr ol) ... – STORM

+1

Verwenden Sie ein Panel, um dieses Verhalten auszuprobieren – techspider

0

Ihre Image zu einem ASP.NET-Containern hinzufügen würden Sie das Leben leichter machen und würde im Einklang mit der Art und Weise, Dinge zu tun, die im Rahmen mehr sein. Sie können Ihre Schaltfläche abhängig vom Typ des gewünschten HTML-Containers verschiedenen Typen von Websteuerelementen hinzufügen.

Option 1 - Place

ein Platzhalter ist nicht als HTML-Element gemacht wird. Seine Ausgabe enthält nur die Steuerelemente, die hinzugefügt wurden. Unter den drei hier vorgestellten Containersteuerungen ist es der Literalsteuerung am ähnlichsten.

<asp:PlaceHolder ID="container" runat="server" /> 

Option 2 - Platten

Ein Panel ist als als div Element dargestellt.

<asp:Panel ID="container" runat="server" /> 

Option 3 - Etiketten

Ein Label ist als span Element gerendert.

<asp:Label ID="container" runat="server" /> 

die Steuerung Hinzufügen

Die folgende Erklärung kann in Code-behind verwendet werden, um das Image einen der 3 Arten von Behältern ASP.NET oben erwähnt hinzuzufügen:

container.Controls.Add(dynBtn);