简体   繁体   中英

ASP.NET dynamically created textbox doesn't change value

I have the following issue: I create a TextBox dynamically in my web page, its value is "initialVal" in the beginning. Now I need to make a postback (not callback) to the server, and during this operation, I need to compute/change the value of my textbox to other value.

Here's an example:

protected void Page_Load(object sender, EventArgs e)
    {
        TextBox txtBox = new TextBox();
        txtBox.ID = "newButton";
        form1.Controls.Add(txtBox);
        txtBox.Text = "initialVal";

        if (IsPostBack && Session["change"] == null)
        {
            txtBox.Text = "change";
            Session["change"] = true;
        }
    }

The problem: even if I change the value via code, the textbox will keep the text "initialVal". I feel this is something related to the view state, but I don't understand. Coudl anyone please help me here?

Thanks.

Create your dynamic textbox creation in !IsPostBack

    protected void Page_Load(object sender, EventArgs e)
        {
if(!isPostBack){
            TextBox txtBox = new TextBox();
            txtBox.ID = "newButton";
            form1.Controls.Add(txtBox);
            txtBox.Text = "initialVal";
    }
            if (IsPostBack && Session["change"] == null)
            {
                txtBox.Text = "change";
                Session["change"] = true;
            }
        }

Thanks and let me know if your issue still pending

Everytime you load the page it is running this:

txtBox.Text = "initialVal";

You should wrap this in a check for postback:

if (!Page.IsPostback)
{
    txtBox.Text = "initialVal";
}

That said, onLoad is the wrong event to do the creation, for it to be valid in the early enough in the page lifecycle, use OnInit .
See this article on MSDN .


Here is the final code from @user2890888:

public partial class WebForm1 : System.Web.UI.Page 
{ 
  TextBox txtBox = null; 

  protected void Page_Init(object sender, EventArgs e) 
  { 
    txtBox = new TextBox(); 
    txtBox.ID = "newButton"; 
    form1.Controls.Add(txtBox); 
  } 

  protected void Page_Load(object sender, EventArgs e) 
  { 
     if (!IsPostBack) 
     { 
       txtBox.Text = "initialVal"; 
     } 

     if (IsPostBack && Session["change"] == null) 
     { 
       txtBox.Text = "change"; 
       Session["change"] = true; 
      } 
   } 
}

Find the TextBox and use it

TextBox txtBox = (TextBox)FindControl("txtBox");
txtBox.Text = "change";

Even now you are having issue and your textBox is not getting the value you needed. Store your new value for TEXTBOX in a hiddenfield. I mean ,

 if (IsPostBack && Session["change"] == null)
{
   hiddenfield1.value = "change";    
}

and later in your page script, you can assign back the value in this hiddenfield1 to textbox.

$(document).ready(
{
$('#txtBoxID').value=$('#hiddenfield1').value;
}
);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM