how to get textbox value in placeholder on code be

2019-03-01 14:32发布

问题:

I created some textbox and I want to get their value dynamically. Briefly, ı explain my page:

I have dropDown list has number 1 to 15.When the user select number and I created textbox as selected number. for example; user select 3 and I create 3 text box and user write something in textbox. Here is My Code: aspx Side:

  <asp:DropDownList ID="ddlUserSelected" AutoPostBack="true" OnSelectedIndexChanged="ddlUserSelected_SelectedIndexChanged" runat="server">
 <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
 <asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click"/>

Code Behind:

    protected void ddlUserSelected_SelectedIndexChanged(object sender, EventArgs e)
    {
     for (int a = 1; a <= int.Parse(ddlUserSelected.SelectedItem.Text); a++)
            {

                TextBox txtDate = new TextBox();
                Label lbl = new Label();          
                lbl.Text = "<br/>";        
                txtDate .Width = 70;
                txtDate .CssClass = "tbl";
                txtDate .ID = "txtDate" + a;                  
                PlaceHolder1.Controls.Add(txtDate);            
                PlaceHolder1.Controls.Add(lbl);

            }
}

And Also I have Save button.

protected void btnSave_Click(object sender, EventArgs e)
{

   for (int a = 1; a <= int.Parse(ddlUserSelected.SelectedItem.Text); a++)
    {              
      //I want to get each textbox value               
    }

}

Note: for loop doesn't matter (can be removed) My main aim is get the text box value.

How to get textbox(es) value in btnSave_Click method?

回答1:

Below code will help you

 protected void ddlUserSelected_SelectedIndexChanged(object sender, EventArgs e)
  {
    for (int a = 1; a <= int.Parse(ddlUserSelected.SelectedItem.Text); a++)
    {

        TextBox txtDate = new TextBox();
        Label lbl = new Label();
        lbl.Text = "<br/>";
        txtDate.Width = 70;
        txtDate.CssClass = "tbl";
        txtDate.ID = "txtDate" + a;
        PlaceHolder1.Controls.Add(txtDate);
        PlaceHolder1.Controls.Add(lbl);

    }
  }
  protected void btnSave_Click(object sender, EventArgs e)
  {

    for (int a = 1; a <= int.Parse(ddlUserSelected.SelectedItem.Text); a++)
    {
        if(Request.Form.Get("txtDate" + a.ToString()) != null)
        {
            var str = Request.Form.Get("txtDate" + a.ToString());
        }        
    }
  }

If you are used master page then use below code

        if (Request.Form.Get("ctl00$ContentPlaceHolder1$txtDate" + a.ToString()) != null)
        {
            var str = Request.Form.Get("ctl00$ContentPlaceHolder1$txtDate" + a.ToString());
        }


回答2:

protected void btnSave_Click(object sender, EventArgs e)
            {

               for (int a = 1; a <= int.Parse(ddlUserSelected.SelectedItem.Text); a++)
                {              
                     string value = Request.Form["txtDate" + a];
                }

            }


回答3:

Problem

If you dynamically add controls to a page, you need to reloaded them on Page Init or Page Load.

Otherwise, you won't be able to find them when you post back.

ASPX

<asp:DropDownList ID="ddlUserSelected" AutoPostBack="true" 
    OnSelectedIndexChanged="ddlUserSelected_SelectedIndexChanged" 
    runat="server">
    <asp:ListItem Text="Select one" />
    <asp:ListItem Text="1" />
    <asp:ListItem Text="2" />
    <asp:ListItem Text="3" />
    <asp:ListItem Text="4" />
    <asp:ListItem Text="5" />
</asp:DropDownList>
<br/>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"/>
<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" />

Code Behind

private int Total
{
    get
    {
        int total;
        if (Int32.TryParse(ddlUserSelected.SelectedItem.Text, out total)) 
            return total;
        return 0;
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    CreateTextBoxes(Total);
}

protected void ddlUserSelected_SelectedIndexChanged(object sender, EventArgs e)
{
    CreateTextBoxes(Total);
}

protected void btnSave_Click(object sender, EventArgs e)
{
    int total = Total;
    for (int a = 1; a <= total; a++)
    {
        var textbox = PlaceHolder1.FindControl("txtDate" + a) as TextBox;
    }
}

private void CreateTextBoxes(int total)
{
    for (int a = 1; a <= total; a++)
    {
        // Make sure we do not add same ID again
        if (PlaceHolder1.FindControl("txtDate" + a) == null)
        {
            TextBox txtDate = new TextBox();
            Label lbl = new Label();
            lbl.Text = "<br/>";
            txtDate.Width = 70;
            txtDate.CssClass = "tbl";
            txtDate.ID = "txtDate" + a;
            PlaceHolder1.Controls.Add(txtDate);
            PlaceHolder1.Controls.Add(lbl);
        }
    }
}