Каково влияние условия IsPostBack?

У меня есть страница 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;
    }

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


person Pankouri    schedule 07.07.2011    source источник


Ответы (6)


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

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

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

person Pranay Rana    schedule 07.07.2011

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

Чтобы выразить это конкретно для вашей ситуации

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

if (!IsPostBack)
{
    BindProgramDDL();
}

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

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

person Mitchel Sellers    schedule 07.07.2011

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

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

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

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindProgramDDL();
    }
}
person JConstantine    schedule 07.07.2011

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

person platon    schedule 07.07.2011

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

person Sergey Metlov    schedule 07.07.2011

Страница.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/

person mamoo    schedule 07.07.2011