开发者

class variable losing value

开发者 https://www.devze.com 2023-01-21 07:18 出处:网络
This is how my code looks like. I want to kno why is the value in the label coming as blank or null. I want to assign the value to username at get data and use it at the button click event.

This is how my code looks like.

I want to kno why is the value in the label coming as blank or null.

I want to assign the value to username at get data and use it at the button click event.

Can some1 guide me with this and why is it happening and how to solve this issue

I d开发者_如何学JAVAon't want to use a session and static.

namespace GUI
{
  public partial class Updatechild : System.Web.UI.Page
{
    string UserName;

   protected void Page_Load(object sender, EventArgs e)
    {
       if (!IsPostBack)
        {
          //CALL A FUNCTION TO GET THE VALUE
          GetData();
        }
    }

   protected void GetData()
    {
      //VALUE assigned
       UserName= "USER1"
    }

   // button click event
   protected void Button_Click(object sender, EventArgs e)
    {
       Label.Text = UserName; //value comes as blank.
    }

}


You need to store the value in ViewState or Session.

In general, you need to understand the ASP.Net lifecycle and the client-server interaction model.


To answer the question of why this is happening: Basically each time the server handles a request from the browser for that page, the ASP.NET framework creates a new instance of your UpdateChild class.

In your scenario there are 2 separate requests happening: one when the page loads for the first time and another when the user clicks the button.

During the first request, since the request is not a postback, your UpdateChild class assigns a value to the UserName variable. However, since that instance of UpdateChild will be discarded once the request is done processing, the value assigned to that variable is lost. If you want to preserve this value, then you'll need to store it somewhere other than a class-level variable on your page. The most logical place would probably be in either ViewState or Session.

A simple solution to your problem is to change the declaration of UserName to something like the following:

    string UserName
    {
        get { return ViewState["UserName"] as string; }
        set { ViewState["UserName"] = value; }
    }


The Button_Click event occurs on PostBack and GetData is not called.


You should call GetData from the Button_Click method, also GetData(string node) requires a string. You are only calling it like so GetData()


when you postback, the whole page is recreated, and since your UserName variable is also recreated, it will have its default value which is null. So you need to put this variable in ViewState after its value has been set.


Your if Condition in the Page_Load event is the problem. When the first time page loads, this event gets fired and the UserName string gets assigned with the value from GetData(). But this value has to be persisted either using viewstate or session or static variable. When the user clicks the button, page_load event is fired but due to the If condition where u are checking for !IsPostBack the GetData() function doesn't assign the value to UserName variable. So your label will never get the Username value.

HTH

0

精彩评论

暂无评论...
验证码 换一张
取 消