2011-07-07 3 views
2

У меня есть страница aspx, где я использую AJAX. какКаков эффект IsPostBack Condition?

<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; 
    } 

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

ответ

1

Если я получаю правишь .......

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

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

0

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

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

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

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

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

Выражаясь специфичным для вашей ситуации

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

if (!IsPostBack) 
{ 
    BindProgramDDL(); 
} 

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

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

0

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

0

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

0

Page.IsPostBack

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

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

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

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

Смежные вопросы