簡體   English   中英

從動態創建的文本框中讀取

[英]Read textBox from dynamically created

我正在嘗試使用字符串動態創建文本框。 然后嘗試點擊一下按鈕。

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

正如您從代碼中看到的那樣,我嘗試使用查找控件並循環訪問文本框。 但兩者都失敗了。

我設法使其正常運行,但是只需要在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);

    }

使用一個Placeholder代替div(它將生成一個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;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM