Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: PankouriОтветов: 6

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

postback

Ответы

Ответ 1 · рейтинг 1 · Pranay Rana

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

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

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

Ответ 2 · рейтинг 3 · Mitchel Sellers

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

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

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

if (!IsPostBack)
{
    BindProgramDDL();
}

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

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

Ответ 3 · JConstantine

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

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

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

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

Ответ 4 · platon

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

Ответ 5 · Sergey Metlov

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

Ответ 6 · mamoo

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы