2016-03-30 14 views
0

文字列を使用して動的にテキストボックスを作成しようとしています。バートンのクリックを読み込もうとしています。動的に作成されたテキストボックスを読む

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="textboxtest.aspx.cs" Inherits="test2.textboxtest" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
<div id="TextBoxDiv" runat="server" class="asid box"> 
</div> 
<asp:Button ID="Button1" runat="server" Text="CreateTextBox" onclick="Button1_Click" /> 
<asp:Button ID="Button2" runat="server" Text="ReadTextBox" onclick="Button2_Click" /> 
</asp:Content> 

ここにコードがありません。

protected void Button1_Click(object sender, EventArgs e) 
    {   
     string finalText = @"<input type=""text"" ID=""T1"" runat=""server""> 
          <asp:TextBox ID=""TB1"" runat=""server""></asp:TextBox>";    
     TextBoxDiv.InnerHtml = finalText; 
    } 

    protected void Button2_Click(object sender, EventArgs e) 
    {   
     TextBox txtAddress2 = (TextBox)Page.FindControl("TB1"); 
     foreach (Control c in TextBoxDiv.Controls) 
     { 
      if (c is TextBox) 
      { 
       TextBox txt = (TextBox)c; 
       string str = txt.Text; 
      } 
     } 
    } 

コードからわかるように、私はfindコントロールとループスルーを使ってテキストボックスにアクセスしようとしました。どちらも失敗しています。

+0

代わりにdiv要素の 'Placeholder'を使用して(それはdiv要素を生成します)、その後、追加しますInnerHtmlを使用する代わりにプレースホルダ内のコントロール –

+0

@ ADreNaLiNe-DJ私はテーブルがあり、テキストボックスを持つ複数の列を追加しているので、innetHTMLを使用しています。私はコードを簡略化しました。 – user3202862

+1

InnerHtmlは、ASP.Netコントロールを「コンパイル/実行」することはありません。これは/と文字列を挿入するだけです –

答えて

1

私はそれが仕事を得るために管理し、だけPage_Init eventでダイナミックテキストボックスを作成することによって。したがって、ポストバックがあるたびにダイナミックコントロールを再作成する必要があります。あなたはオンラインで確認することができます、彼らは同じことを言う。

だからここでは、クライアント側である:

 <asp:PlaceHolder runat="server" id="TextBoxesHere" /> 
      <asp:Button ID="Button1" CssClass="btn btn-primary btn-outline" runat="server" 
         Text="CreateTextBox" OnClick="Button1_Click" /> 
      <asp:Button ID="Button2" CssClass="btn btn-primary btn-outline" runat="server" 
         Text="ReadTextBox" OnClick="Button2_Click" /> 

サーバーサイド:

protected void Page_Init(object sender, EventArgs e) 
    { 
     TextBox txt = new TextBox(); 
     txt.ID = "T1"; 
     txt.CssClass = "form-control"; 
     TextBoxesHere.Controls.Add(txt); 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     TextBox txt = new TextBox(); 
     txt.ID = "T1"; 
     txt.CssClass = "form-control"; 
     TextBoxesHere.Controls.Add(txt); 
    } 

    protected void Button2_Click(object sender, EventArgs e) 
    { 
     TextBox txt = (TextBox)TextBoxesHere.FindControl("T1"); 
     ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "", "alert('" + txt.Text + "');", true); 

    } 
+0

ありがとうございます。出来た。 – user3202862

0

divの代わりにPlaceholderを使用して(divを生成する)、InnerHtmlではなくプレースホルダにコントロールを追加します。

だから、これは次のように達成することができます。

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="textboxtest.aspx.cs" Inherits="test2.textboxtest" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"></asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <asp:PlaceHolder runat="server" ID="TextBoxPlaceHolder"></asp:PlaceHolder> 
    <asp:Button ID="Button1" runat="server" Text="CreateTextBox" onclick="Button1_Click" /> 
    <asp:Button ID="Button2" runat="server" Text="ReadTextBox" onclick="Button2_Click" /> 
</asp:Content> 

コードビハインド:

protected void Button1_Click(object sender, EventArgs e) 
{   
    string finalText = @"<input type=""text"" ID=""T1"" runat=""server"">"; 
    var textbox = new TextBox(); 
    textbox.ID = "TB1"; 
    this.TextBoxPlaceHolder.Controls.Add(new LiteralControl(finalText)); 
    this.TextBoxPlaceHolder.Controls.Add(textbox); 
} 

protected void Button2_Click(object sender, EventArgs e) 
{   
    TextBox txtAddress2 = (TextBox)Page.FindControl("TB1"); 
    foreach (Control c in TextBoxDiv.Controls) 
    { 
     if (c is TextBox) 
     { 
      TextBox txt = (TextBox)c; 
      string str = txt.Text; 
     } 
    } 
} 
+0

答えをありがとう。上記のコードを試しました。私は間違っていない場合は "TextBoxDiv"を使用していないので、私は "TextBoxPlaceHolder"と置き換えているが、まだ私は値を取得することはできません。 – user3202862

関連する問題