переменная класса теряет значение - PullRequest
0 голосов
/ 21 октября 2010

Вот так выглядит мой код.

Я хочу знать, почему значение в метке пустое или пустое.

Я хочу присвоить значение имени пользователя при получении данных и использовать его при событии нажатия кнопки.

Может ли кто-нибудь1 подсказать мне, почему это происходит и как решить эту проблему

Я не хочу использовать сеанс и статические данные.

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.
    }

}

Ответы [ 6 ]

8 голосов
/ 21 октября 2010

Вам необходимо сохранить значение в ViewState или Session.

В общем, вам необходимо понимать жизненный цикл ASP.Net и модель взаимодействия клиент-сервер.

4 голосов
/ 21 октября 2010

Чтобы ответить на вопрос, почему это происходит: в основном каждый раз, когда сервер обрабатывает запрос от браузера для этой страницы, платформа ASP.NET создает новый экземпляр вашего UpdateChild класса.

В вашем сценарии происходит 2 отдельных запроса: один, когда страница загружается в первый раз, и другой, когда пользователь нажимает кнопку.

Во время первого запроса, поскольку запрос не является обратной передачей, класс UpdateChild присваивает значение переменной UserName. Тем не менее, поскольку этот экземпляр UpdateChild будет отброшен после завершения обработки запроса, значение, присвоенное этой переменной, будет потеряно. Если вы хотите сохранить это значение, вам нужно будет сохранить его на странице, отличном от переменной уровня класса. Наиболее логичным местом, вероятно, будет либо ViewState, либо Session.

Простое решение вашей проблемы - изменить объявление UserName на что-то вроде следующего:

    string UserName
    {
        get { return ViewState["UserName"] as string; }
        set { ViewState["UserName"] = value; }
    }
3 голосов
/ 21 октября 2010

Событие Button_Click происходит на PostBack, а GetData не вызывается.

2 голосов
/ 21 октября 2010

Ваше условие if в событии Page_Load является проблемой. При первой загрузке страницы это событие вызывается, и строке UserName присваивается значение из GetData (). Но это значение должно быть сохранено либо с использованием viewstate или сеанса, либо статической переменной. Когда пользователь нажимает кнопку, происходит событие page_load, но из-за условия If, когда вы проверяете! IsPostBack, функция GetData () не присваивает значение переменной UserName. Таким образом, ваш ярлык никогда не получит значение имени пользователя.

НТН

2 голосов
/ 21 октября 2010

при обратной передаче вся страница воссоздается, и поскольку ваша переменная UserName также воссоздается, ее значение по умолчанию будет нулевым. Поэтому вам нужно поместить эту переменную в ViewState после того, как ее значение было установлено.

2 голосов
/ 21 октября 2010

Вы должны вызывать GetData из метода Button_Click, также GetData(string node) требует строку. Вы только так это называете GetData()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...