Perché il pannello di aggiornamento esegue un post completo per il controllo personalizzato?

StackOverflow https://stackoverflow.com/questions/616884

Domanda

Ho un controllo personalizzato piuttosto complesso: il controllo personalizzato contiene un paio di pannelli di aggiornamento.

Sto cercando di usare il controllo in questo modo all'interno di un pannello di aggiornamento:

    <asp:UpdatePanel ID="up1" runat="server">
    <ContentTemplate>
     <asp:Button ID="btn1" runat="server" Text="Sample Button" />&nbsp;&nbsp;<asp:Label ID="lblTime" runat="server"></asp:Label>    
     <cc1:MyCustomControl ID="MyCustomControl1" runat="server" >
    </cc1:MyCustomControl>
    </ContentTemplate>
</asp:UpdatePanel>

Quando faccio clic sul pulsante nel pannello di aggiornamento, esegue un post asincrono e non è presente alcuna schermata "sfarfallio" Quando faccio clic su un pulsante nel mio controllo personalizzato, la pagina lampeggia e fa un post completo indietro.

All'interno del controllo personalizzato, ci sono pannelli di aggiornamento che stanno tentando di eseguire postback completi (in base ai trigger).

Come posso fare in modo che UpdatePanel a livello di pagina non esegua un postback completo, qualunque cosa accada all'interno del controllo personalizzato?

È stato utile?

Soluzione 2

Individuato la soluzione problema simile a questo: Come posso ottenere un UpdatePanel per intercettare un DropDownList di CompositeControl

Tranne il mio controllo che ha causato il postback era in un pannello di aggiornamento con un trigger postback completo. Sono stato in grado di estrarre quel controllo in modo che non fosse nidificato nei pannelli di aggiornamento e che lo ha risolto.

Altri suggerimenti

Hai pensato di impostare esplicitamente un asp: AsyncPostBackTrigger con il controllo btn1 nel controllo up1 UpdatePanel.

<asp:UpdatePanel ID="up1" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btn1" EventName="Click" />
    </Triggers>
    <ContentTemplate>     
        <asp:Button ID="btn1" runat="server" Text="Sample Button" />  
        <asp:Label ID="lblTime" runat="server"></asp:Label>         
        <cc1:MyCustomControl ID="MyCustomControl1" runat="server" />                 
    </ContentTemplate>
</asp:UpdatePanel>

Modifica: Come hai provato a chiamare esplicitamente il metodo Update nell'evento OnClick del pulsante per il pannello di aggiornamento? Ciò include i pannelli di aggiornamento incorporati nel controllo personalizzato.

Vorrei prima verificare se c'è qualche altro problema con il controllo personalizzato che causa il postback della pagina intera, poiché in ogni caso ciò che dovrebbe accadere è che l'intero pannello di aggiornamento si aggiorni (sempre con ajax).

Dopodiché, dai un'occhiata alla sezione Nesting UpdatePanel Controls di questo: http://msdn.microsoft.com/en-us/library/bb398867 aspx #

Assicurati anche di avere il controllo ScriptManager con la proprietà EnablePartialRendering impostata su true.

In UpdatePanel, imposta la proprietà ChildrenAsTriggers = " true " . Questo dice a UpdatePanel di intercettare tutte le invocazioni PostBack che provengono dall'interno di UpdatePanel.

Potresti anche voler esplorare la proprietà UpdateMode , che determina quali tipi di eventi attivano un aggiornamento. (Per impostazione predefinita, un UpdatePanel si aggiorna se viene aggiornato qualsiasi altro pannello sullo schermo. Questo mi ha lasciato per un po 'finché non ho capito cosa stava succedendo.)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top