Реализация IsPostBack в загрузке страницы - PullRequest
20 голосов
/ 01 сентября 2010

Чем больше я использую ASP.NET, тем больше if (!IsPostBack) {} кажется бессмысленным ...

Первый пример:

Например, я просто погуглил проблему, они сказали использовать это как часть решения:

if (!Page.IsPostBack)
{
   Page.LoadComplete += new EventHandler(Page_LoadComplete);
}

Что делает именно так, как закодировано, LoadComplete будет срабатывать только при первой загрузке. После нажатия кнопки или чего-либо, что вызывает обратную передачу, событие LoadComplete остается отцепленным, таким образом пропуская обработчик события. Поэтому их «исправление» работает только при первой загрузке = ничего не стоит. Я быстро закомментировал if (!Page.IsPostBack) {}, и теперь событие всегда срабатывает по желанию.

Второй пример:

Я пытаюсь привязать события к динамически создаваемой кнопке (что, кстати, я не могу заставить работать [GRR!]). Я вижу примеры, показывающие это:

myEditToggleButton = new Button();
myEditToggleButton.ID = "editToggleButton"; 
//^GOTTA HAVE THIS FOR EVENTS TO WORK! (supposedly, I haven't seen it work...)
if (!IsPostBack)
{
   myEditToggleButton.Click += new EventHandler(myEditToggleButton_Click);
}
Controls.Add(myEditToggleButton);

Как и в первом примере, я понимаю, что событие не будет перехвачено после загрузки первой страницы, поэтому кнопка «инертна» после одного нажатия (поскольку нажатие вызвало обратную передачу).

Вопрос:

Когда вы должны использовать if (!IsPostBack) {}? Я предполагаю, что это связано только с элементами управления, созданными на разметке.

Ответы [ 8 ]

17 голосов
/ 01 сентября 2010

Короче говоря, вы используете его каждый раз, когда вам нужно выполнить ТОЛЬКО при первой загрузке.

Классическое использование Page.IsPostBack - это привязка данных / инициализация управления.

if(!Page.IsPostBack)
{
   //Control Initialization
   //Databinding
}

Вещи, которые сохраняются на ViewState и ControlState, не требуют пересоздания при каждой обратной передаче, поэтому вы проверяете это условие, чтобы избежать выполнения ненужного кода.

Другое классическое использование - получение и обработка Querystring параметров.Вам не нужно делать это при обратной передаче.

6 голосов
/ 01 сентября 2010

Когда нет необходимости повторять операцию, отличную от первого раза.

используйте ее с дорогими операциями (такими как получение данных из базы данных или заполнение ListItems), которые должны выполняться только в первый разстраница или элемент управления загружен.Если страница отправляется на сервер, а затем перезагружается, повторять операцию не нужно.Протестировав значение IsPostBack, вы можете пропустить дорогостоящую операцию,

4 голосов
/ 01 сентября 2010

Это для обработки данных формы.

Если вы хотите обрабатывать POST-данные, вы можете это сделать, только если на странице действительно размещены данные, а не при первой загрузке.Следовательно, флаг IsPostBack.

3 голосов
/ 01 сентября 2010

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

Часто вам нужно предотвратить сохранение информации на странице при попадании на серверэто точка

if(!Page.IsPostBack)
1 голос
/ 15 июля 2012
protected void Page_Load(object sender, EventArgs e)            
{
    if (!IsPostBack) { 
        SqlConnection conn = new SqlConnection("Data Source=-----; Database=-----; Integrated Security=True");
        SqlDataAdapter da = new SqlDataAdapter();
        conn.Open();
        da.SelectCommand = new SqlCommand("Select Command",conn);
        conn.Close();
        DataTable dt = new DataTable();
        da.Fill(dt);

        ddlSearch.DataSource = dt;
        ddlSearch.DataTextField = "---";
        ddlSearch.DataValueField = "---";
        ddlSearch.DataBind();
    }
}
1 голос
/ 01 сентября 2010

Ваши обработчики событий должны быть подключены всякий раз, когда событие может быть запущено (независимо от статуса PostBack)

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

0 голосов
/ 31 января 2013

Сначала вы должны понять, что такое постбэк, когда вы запускаете свой проект в Visual Studio,
если у вас есть if statement, который проверяет, является ли isPostBack true или false в вашем Page_Load методе, на данный момент isPostBack равен false, значит, это не postback, тогда что такое постбэк,
Теперь нажмите button (если у вас нет кнопки, добавьте ее и метод нажатия кнопки), на этом этапе вы отправляете запрос обратно на сервер, затем сервер отвечает, этот процесс так называемый postback, который срабатывает при нажатии button,

одна вещь, которую вы действительно должны заметить, метод Page_Load будет выполнен снова, не только метод Button_click будет выполнен, так что теперь isPostBack равен true, означает, что это обратный вызов, да , это действительно постбэк, потому что вы нажали кнопку.

0 голосов
/ 01 сентября 2010

Кроме того, вы должны использовать IsPostBack, если хотите инициализировать элементы управления, в противном случае они будут возвращаться к значениям по умолчанию при каждой загрузке. Это приведет пользователя в замешательство, так как при попытке использования формы введенные значения будут сброшены до значений по умолчанию.

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