2011-06-02 9 views
5

Tengo dos paneles de actualización (vamos a llamarlos A y B). En A, tengo una casilla de verificación simple. AutoPostback establecido en verdadero. Cuando lo verifique (o lo desmarque), habilitará/deshabilitará un simple menú desplegable dentro del mismo Panel de actualización.Dos paneles de actualización que funcionan en paralelo, uno que no se actualiza

UpdatePanel B tiene un largo proceso de ejecución en el mismo. Lanza una solicitud para crear un menú desplegable que demora casi 2 minutos en construirse. Si cargo la página y no toco nada, el menú desplegable se construye después de aproximadamente 2 minutos y se procesa perfectamente. Sin embargo, si durante esos dos minutos decidí marcar mi casilla (y generar una devolución de datos parcial para el panel A), el panel de actualización B nunca se procesa. Durante la depuración, descubrí que está completando su recuperación con éxito, pero el panel actual nunca se actualiza para mostrar el control.

He intentado usar UpdateMode = Conditional en el panel B (para asegurarme de que el panel A no lo moleste) y produce los mismos resultados. He verificado que también se llama a B.Update().

EDITAR

Panel A:

<asp:UpdatePanel ID="upMailScrub" runat="server"> 
    <ContentTemplate> 
     <asp:Button ID="btnAnalyzeLaunch" runat="server" onclick="btnAnalyzeLaunch_Click" Text="Analyze Launch" style="display: none" />  
     <table> 
      <tr> 
       <td><asp:CheckBox ID="cbxScrub" runat="server" Checked="true" 
         oncheckedchanged="cbxScrub_CheckedChanged" AutoPostBack="True" /></td><td><label for="cbxScrub">Scrub this campaign</label></td> 
       <td style="padding-left: 10px"> 
        Vendor:&nbsp;&nbsp;<asp:DropDownList ID="ddlScrubVendor" runat="server"> 
         <asp:ListItem Text="LexisNexis" Value="LexisNexis" /> 
        </asp:DropDownList> 
       </td> 
      </tr> 
     </table> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Panel B:

<asp:UpdatePanel ID="upDdlCampaigns" runat="server" UpdateMode="Conditional"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="btnAnalyzeLaunch" EventName="Click" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:HiddenField id="hidAction" runat="server" /> 
     <asp:Panel ID="pnlPleaseWait" runat="server"><img src="style/images/PleaseWait.gif" />&nbsp;Please wait while the Five9 Campaigns are retrieved...</asp:Panel> 
     <asp:DropDownList ID="ddlCampaigns" Visible="false" runat="server" class="required" 
      AutoPostBack="True" OnSelectedIndexChanged="ddlCampaigns_SelectedIndexChanged" /> 
     <asp:Button ID="btnRefreshDDL" runat="server" onclick="btnRefreshDDL_Click" style="display: none" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

alguna sugerencia? Gracias.

+0

¿Se puede publicar parte del código? – Jemes

Respuesta

3

usted pide demasiado de UpdatePanel :)

UpdatePanel no puede trabajar con 2 petición simultánea de esa manera. Considere hacer una llamada ajax para obtener sus resultados.

Por qué puede preguntar, una razón básica es que cada página tiene solo un estado visual. Cuando solicita desde el A o el B, UpdatePanel para enviar/obtener datos, el viewstate debe cambiar a un nuevo viewstate. Ahora, cuando le pides un resultado a A, y antes de que finalices, pides resultados de B, vas a obtener 2 estados de vista diferentes, y uno de ellos va a fallar porque en el medio hay cambios.

ViewState no es el único pensamiento, en cada clic del panel de actualización, la página publica todas las entradas post a la página, ambas entradas A y B y todo el resto dentro de la página, esto también es un problema. Imagine esto, por ejemplo, desencadena A UpdatePanel con las entradas A + B, y luego, antes de que A finalice, activa B UpdatePanel con las mismas entradas. Ahora A, espera los resultados de A + B, el mismo y B, pero en el medio tiempo los resultados A + B de A ahora son diferentes porque B los ha cambiado, y falla.

+0

¡Eso tiene perfecto sentido! Debido a la simplicidad del Panel A, voy a controlar eso a través de Javascript; es solo ocultar/mostrar y habilitar/deshabilitar. Nada realmente pesado allí. Mantendré mi proceso de ejecución larga como el único panel de actualización en la página y estoy seguro de que funcionará. –

Cuestiones relacionadas