Реализация IsPostBack при загрузке страницы
Чем больше я использую ASP.NET, тем больше if (!IsPostBack) {}
кажется бессмысленным...
Первый пример:
Например, я просто решил проблему с Google, они сказали это как часть решения:
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) {}
? Я предполагаю, что это связано только с создаваемыми элементами управления.
Ответы
Ответ 1
Короче говоря, вы используете его каждый раз, когда вам нужно что-то выполнять ТОЛЬКО при первой загрузке.
Классическим использованием Page.IsPostBack
является инициализация привязки данных/управления.
if(!Page.IsPostBack)
{
//Control Initialization
//Databinding
}
Вещи, которые сохраняются в ViewState
и ControlState
, не нужно воссоздавать при каждой обратной передаче, поэтому вы проверяете это условие, чтобы избежать выполнения ненужного кода.
Другим классическим использованием является получение и обработка параметров Querystring
. Вам не нужно делать это при обратной передаче.
Ответ 2
Если нет необходимости повторять операцию, отличную от первого раза.
используйте его с дорогостоящими операциями (такими как получение данных из базы данных или заполнение ListItems), которые должны выполняться только при первом загрузке страницы или элемента управления. Если страница отправлена на сервер и затем перезагружена, нет необходимости повторять операцию. Проверяя значение IsPostBack, вы можете пропустить дорогостоящую операцию,
Ответ 3
Он для обработки данных формы.
Если вы хотите обрабатывать POSTED-данные, вы хотите сделать это только в том случае, если на странице действительно размещены данные, а не при первой загрузке. Следовательно, флаг IsPostBack.
Ответ 4
Что может произойти, если вы вызываете обратную передачу, вы можете изменить состояние своих элементов управления, не имея значения. Например, при использовании gridview, если вы вернете в режим редактирования, у вас больше не будет доступа к вашим редактируемым полям.
Часто вам нужно сохранить информацию от исчезновения на странице при попадании на сервер, это точка
if(!Page.IsPostBack)
Ответ 5
Обработчики событий должны быть подключены каждый раз, когда событие может быть запущено (независимо от состояния PostBack)
Кроме того, при динамическом добавлении элементов управления обязательно соблюдайте asp жизненный цикл страницы
Ответ 6
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();
}
}
Ответ 7
Кроме того, вы должны использовать IsPostBack, если вы хотите инициализировать элементы управления, иначе они будут возвращены к умолчанию по каждой загрузке. Это смущает пользователя, поскольку, когда они пытаются использовать форму, их введенные значения получат reset по умолчанию.
Ответ 8
Сначала вам нужно понять, что такое postback, когда вы запускаете свой проект в Visual Studio,
если у вас есть if statement
, который проверяет, есть ли isPostBack
true
или false
в вашем методе Page_Load
, на данный момент isPostBack
есть false
, означает, что это не postback
, тогда что такое postback,
теперь нажмите button
(если у вас нет кнопки, добавьте один и метод нажатия кнопки), на этот момент вы отправляете запрос обратно на сервер, затем сервер отвечает, этот процесс является так называемый postback
, который запускается нажатием button
,
одно замечание, которое вам действительно нужно заметить, метод Page_Load
будет выполнен снова, будет выполнен не только метод Button_click
, поэтому теперь isPostBack
есть true
, это означает, что это postback, да, это действительно обратная передача, потому что вы нажали кнопку.