2011-01-31 2 views
1

У меня сложный случай, поэтому я не могу его опубликовать.Когда UpdatePanel делает PostBack другим

У меня есть два UpdatePanels с двумя UserControls внутри них, как следующее:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <A:u1 ID="u1" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <A:u2 ID="u2" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

В данном примере PostBack в u1 не влияет на u2. но в моем коде PostBack в первом UserControl сделал PostBack во втором.

Каковы ожидаемые причины?

Спасибо за помощь.

ответ

1

Это по дизайну: при частичной обратной передаче вся страница отображается снова, даже если только часть полученной разметки отправляется клиенту. Таким образом, оба пользовательских элемента управления снова проходят через их жизненные циклы, даже если обновляется только u1.

Если вы хотите, чтобы обнаружить, что случай, вы можете использовать IsInAsyncPostBack свойство:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (ScriptManager.GetCurrent(Page).IsInAsyncPostBack) { 
     // This is a partial postback. 
    } 
} 
+0

Извините, но в образце, который я написал, я добавил брейк-пойнт в 'Page_Load' в' UserControls' и он не вызывается, когда другой делает «PostBack» – Homam

+0

@John, интересно, его [определенно следует назвать] (http://forums.asp.net/p/1023109/1389657.aspx). Установлена ​​ли ваша точка останова в начале обработчика? –

+0

Спасибо, ты прав. но в двух 'UserControls' он вводится в if if stetement. извините, но почему? – Homam

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