get values from dynamically added textboxes asp.net c#

后端 未结 3 1535
小鲜肉
小鲜肉 2020-12-09 06:36

as suggested in the title i have in which i can insert how many textboxes i want to add to a placeholder. i can add the textboxes just fine the problem is i cant get the val

相关标签:
3条回答
  • 2020-12-09 07:07

    You are actually creating textboxes with property Text set to default = ""; So you need set txt.Text property for example:

        public void txtExtra_TextChanged(object sender, EventArgs e)
        {
            for (int a = 1; a <= int.Parse(txtExtra.Text); a++)
            {
                TextBox txt = new TextBox();
                txt.ID = "txtquestion" + a;
                txt.Text = "Some text"; // Set some text here
                pholder.Controls.Add(txt);
    
            }
        }
    

    EDIT:

    After that you can store your values into the list:

    private static List<string> values = new List<string>();
    
        protected void btnConfirm_Click(object sender, EventArgs e)
        {
            foreach (Control ctr in pholder.Controls)
            {
                if (ctr is TextBox)
                {
                    string value = ((TextBox)ctr).Text;
                    values.Add(value); // add values here
                }
            }
        }
    

    EDIT: Here is your values: enter image description here

    EDIT: For super mega better understanding: Create one more textbox txtOutput then add button GetDataFromTextBoxesAndPutItBelow and create an event for that button `Click'. Event code:

        protected void btnGetData_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < values.Count; i++)
                txtOutput.Text += "Value from txtquestion1: " + values[i] + " ";
        }
    

    Screenshot looks: screen2

    0 讨论(0)
  • You are almost there.

    Problem

    You need to reload those dynamically created textboxes on post back. Otherwise, they will become null, and you won't be able to find it.

    In order to do that, you need to save those dynamically TextBoxes Ids in persistent location such as View State or Session State.

    Screen Shot

    enter image description here

    ASPX

    Number of TextBoxes: <asp:TextBox runat="server" ID="CounterTextBox" 
        OnTextChanged="CounterTextBox_TextChanged" AutoPostBack="True" /><br/>
    <asp:PlaceHolder runat="server" ID="TextBoxPlaceHolder" /><br/>
    <asp:Button runat="server" ID="ConfirmButton" Text="Confirm" 
        OnClick="ConfirmButton_Click" /><br/>
    Result: <asp:Literal runat="server" ID="ResultLiteral"/>
    

    Code Behind

    private List<string> TextBoxIdCollection
    {
        get
        {
            var collection = ViewState["TextBoxIdCollection"] as List<string>;
            return collection ?? new List<string>();
        }
        set { ViewState["TextBoxIdCollection"] = value; }
    }
    
    protected void Page_Load(object sender, EventArgs e)
    {
        foreach (string textboxId in TextBoxIdCollection)
        {
            var textbox = new TextBox {ID = textboxId};
            TextBoxPlaceHolder.Controls.Add(textbox);
        }
    }
    
    protected void CounterTextBox_TextChanged(object sender, EventArgs e)
    {
        var collection = new List<string>();
        int total;
        if (Int32.TryParse(CounterTextBox.Text, out total))
        {
            for (int i = 1; i <= total; i++)
            {
                var textbox = new TextBox { ID = "QuestionTextBox" + i };
                // Collect this textbox id
                collection.Add(textbox.ID); 
                TextBoxPlaceHolder.Controls.Add(textbox);
            }
            TextBoxIdCollection= collection;
        }
    }
    
    protected void ConfirmButton_Click(object sender, EventArgs e)
    {
        foreach (Control ctr in TextBoxPlaceHolder.Controls)
        {
            if (ctr is TextBox)
            {
                string value = ((TextBox)ctr).Text;
                ResultLiteral.Text += value;
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-09 07:23
    for (int i = 0; i < dataTable.Rows.Count; i++)
    {
    
        int comment_id = Convert.ToInt32(dataTable.Rows[i]["comment_id"]);
        string created_by_name = dataTable.Rows[i]["created_by_name"].ToString();
        string created_at = dataTable.Rows[i]["created_at"].ToString();
        string comment = dataTable.Rows[i]["comment"].ToString();
    
        HtmlGenericControl divComment = new HtmlGenericControl("div"); //This is root object of comment.Other objects like textbox,button,etc added into this object.
        //divComment.Attributes.Add("class", "div_post_display");
        divComment.Attributes.Add("id", comment_id.ToString());
    
        /* Comment by */
        HtmlGenericControl lblCommentBy = new HtmlGenericControl("label");
        //lblCommentBy.Attributes.Add("class", "divauthor");
        lblCommentBy.InnerText = "" + created_by_name + " (" + created_at + ")";
    
        /* Comment body */
        HtmlGenericControl pComment = new HtmlGenericControl("p");
        //lblCommentBy.Attributes.Add("class", "divauthor");
        pComment.InnerText = comment;
    
        divComment.Controls.Add(lblCommentBy);
        divComment.Controls.Add(pComment);
    
        if (Session["user_id"] != null)
        {
            if (Session["user_level"].ToString() == "1") //Admin can reply for comment
            {
                /* Reply Form */
                TextBox txtReply = new TextBox(); //Create object dynamacaly
                txtReply.ID = "txtReply_"+comment_id;
                txtReply.Attributes.Add("class", "form-control"); //Add css class
                txtReply.Width = 400;
                divComment.Controls.Add(txtReply); //Add obj to root object(div)
    
                Button btnReply = new Button(); //Create object dynamacaly
                btnReply.Text = "Reply"; //Set button text 
                btnReply.Attributes.Add("class", "btn btn-sm btn-success"); //Add css class
                btnReply.Click += btnReply_Click;
                btnReply.CommandArgument = comment_id.ToString();
                divComment.Controls.Add(btnReply); //Add obj to root object(div)
    
                HtmlGenericControl br = new HtmlGenericControl("br"); //Create object dynamacaly
                divComment.Controls.Add(br); //new line
            }
        }
        pnlShowComments.Controls.Add(divComment);
    
    }
    
    0 讨论(0)
提交回复
热议问题