2016-04-28 27 views
0

ボタンとリテラルコントロールを持つ単純なASP.Netページがあります。ボタンをクリックすると、私は新しい動的コントロール(imagebutton)を生成し、HtmlTextWriterを介してリテラルにレンダリングしています。コントロールの作成時には、私も解雇されていないonClickイベントを追加しています。ここに私のコードは次のとおりです。動的に作成されたHtmlTextWriterでレンダリングされたコントロールはイベントを起動しません。

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

制御は、エラーなしで作成された取得されますが、イベントはfireingされていません。

+0

テキストの代わりにリテラルにコントロールを追加しようとする – techspider

答えて

0

この

lit.Controls.Add(dynBtn); 
+0

なぜこれが助けて将来のユーザーに役立つと思うかについてのいくつかの詳細情報を追加 – TheGameiswar

+0

これはうまくいかないリテラはpage.controls.add(mycontr ol)... – STORM

+1

パネルを使用してこの動作を試してください – techspider

0

は、ASP.NETコンテナにあなたのImageButtonを追加してみてください、あなたの人生がより簡単になるだろう、と枠組みの中で物事のやり方に沿って、よりになります。必要なHTMLコンテナの種類に応じて、さまざまな種類のWebコントロールにボタンを追加できます。

オプション1 - プレースホルダ

プレースホルダがHTML要素としてレンダリングされていません。その出力には、追加されたコントロールのみが含まれます。ここに示した3つのコンテナコントロールの中では、Literalコントロールに最もよく似ています。

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

オプション2 - パネル

パネルをdiv要素としてとしてレンダリングされます。

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

オプション3 - ラベル

レーベルspan要素としてレンダリングされます。

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

次の文は、上述したASP.NET容器の3種類のいずれかのImageButtonを追加するためのコードビハインドに使用することができる制御を

追加:

container.Controls.Add(dynBtn); 
関連する問題