2016-03-30 20 views
0

Ich versuche, ein Textfeld dynamisch mit einer Zeichenfolge zu erstellen. und dann versuchen, auf einem Click-Klick zu lesen.Lese TextBox von dynamisch erstellt

<%@ 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> 

Hier ist der Code dahinter.

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

Wie Sie aus dem Code sehen können, habe ich versucht, den Textkasten mit Hilfe von Find Control und auch durchschleifen zugreifen. aber beide versagen.

+0

verwenden, um eine 'Placeholder' anstelle eines div (es wird ein div erzeugen) und fügen Sie dann Steuerelemente im Platzhalter anstelle von 'InnerHtml' –

+0

@ ADreNaLiNe-DJ Ich verwende innetHTML, weil ich eine Tabelle habe und dann mehrere Spalten mit Textfeldern hinzufüge. Ich habe den Code vereinfacht. – user3202862

+1

InnerHtml lässt Ihre ASP.Net-Steuerelemente nicht "kompilieren/ausführen". Fügen Sie einfach die Zeichenfolge als/ist –

Antwort

1

ich es geschafft, um es aber zu arbeiten, nur um dynamische Textfelder in Page_Init event erstellen zu müssen. Jedes Mal, wenn ein Post zurück ist, müssen Sie Ihre dynamischen Steuerelemente neu erstellen. Sie können online überprüfen, sie sagen das Gleiche.

So, hier ist der Client-Seite:

 <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" /> 

Server Side:

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

Danke. es funktionierte. – user3202862

0

Verwenden Sie eine Placeholder anstelle von einem div (es wird ein div generieren) und fügen Sie Steuerelemente in den Platzhalter anstelle von InnerHtml.

So kann dies wie folgt erreicht werden:

<%@ 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> 

-Code-behind:

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

Danke für die Antwort. Ich habe den obigen Code ausprobiert. Wenn ich nicht falsch liege, verwenden Sie nicht "TextBoxDiv", also habe ich es mit "TextBoxPlaceHolder" ersetzt, aber immer noch kann ich die Werte nicht bekommen. – user3202862

Verwandte Themen