Каково влияние IsPostBack Condition? - PullRequest
2 голосов
/ 07 июля 2011

У меня есть страница aspx, где я использую AJAX. как

<asp:UpdatePanel runat="server" ID="upPanelDDLProgram">
  <ContentTemplate>
    <asp:DropDownList ID="DDLProgram" runat="server" Width="194px" Height="18px" OnSelectedIndexChanged="OnDDLProgramChanged" AutoPostBack="true">
    </asp:DropDownList>
  </ContentTemplate>
</asp:UpdatePanel> 

и мой код похож на

    protected void Page_Load(object sender, EventArgs e)
    {
        //if (!IsPostBack)
        //{
        //    BindProgramDDL();
        //}
        BindProgramDDL();
    }

    protected void BindProgramDDL()
    {
        List<CcProgramEntity> programEntities = FormSaleSubmit_BAO.GetAllPrograms();

        DDLProgram.DataSource = programEntities;
        DDLProgram.DataTextField = "Shortname";
        DDLProgram.DataValueField = "Id";
        DDLProgram.DataBind();
        string programCode = programEntities[DDLProgram.SelectedIndex].Code;
    }

    protected void OnDDLProgramChanged(object sender, EventArgs e)
    {
        List<CcProgramEntity> programEntities = FormSaleSubmit_BAO.GetAllPrograms();
        string programCode = programEntities[DDLProgram.SelectedIndex].Code;
    }

Если условие является событием загрузки страницы, закомментировано. Если я переключаю комментирующую часть события загрузки страницы, она отлично работает в обоих случаях. Мой вопрос: почему это происходит?

Ответы [ 6 ]

3 голосов
/ 07 июля 2011

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

Чтобы поместить этов зависимости от вашей ситуации

Использование:

if (!IsPostBack)
{
    BindProgramDDL();
}

В результате BindProgramDDL будет вызываться ТОЛЬКО при первой загрузке страницы, все AJAX или другие действия пользователя со страницей НЕ будут вызывать BindProgramDDL;

Без этого КАЖДАЯ загрузка страницы вызывала бы метод, необязательно удаляя базу данных по записям.

1 голос
/ 07 июля 2011

Если я правильно вас понял .......

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

IsPostBack - это правда, когда выполняется обратная публикация с использованием серверного элемента управления, например раскрывающегося списка, флажка, текстового поля ............ При первой загрузке страницы это свойство имеет значение false но в последующем запросе к той же странице значение этого свойства равно true. Вы можете проверить документ MSDN для более подробной информации об этом.

0 голосов
/ 07 июля 2011

Page.IsPostBack

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

см. http://msdn.microsoft.com/en-us/library/system.web.ui.page.ispostback.aspx

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

Примите также во внимание, что, поскольку вы используете ajax, вы также можете захотеть перехватить, если произошла «асинхронная обратная передача».Смотри http://encosia.com/are-you-making-these-3-common-aspnet-ajax-mistakes/

0 голосов
/ 07 июля 2011

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

0 голосов
/ 07 июля 2011

Я подозреваю, что DropDownList сохраняет элементы в ViewState и затем работает с ними во время всех последующих запросов.Вот почему ваш код работает, даже если DataSource редактора установлен только тогда, когда IsPostBack возвращает false.

0 голосов
/ 07 июля 2011

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

Полезно, когда вы хотите запускать методы только один раз, когда страница изначально загружена

Ваш код, вероятно, должен выглядеть так, чтобы достичь наилучших результатов

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindProgramDDL();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...