2010-01-26 10 views
9

Ho un problema con il mio AJAX e ASP.NET 3.5 :( Il problema è davvero strano, dato che sto usando la stessa cosa su pagine diverse e funziona bene lì, ma su questa pagina specifica, questo non funziona .Elenco a discesa (nel Pannello di aggiornamento) che causa FULL PostBack!

Ecco quello che ho:

<asp:UpdatePanel ID="upMain" runat="server" UpdateMode="Conditional" Visible="true" RenderMode="Inline"> 
       <ContentTemplate> 
<asp:DropDownList ID="ddlNewService_PortTelco" runat="server" Width="250" CssClass="dropdown" AutoPostBack="true" OnSelectedIndexChanged="Provision_PortedTelcoChanged"></asp:DropDownList> 
</ContentTemplate> 
</asp:UpdatePanel> 

Sulla strada prima che la discesa c'è un DIV (html uno), e ASP poi pochi:. Pannelli non capisco il motivo per cui questo sta causando un pieno POST BACK?!

Qualche idea? Grazie

risposta

1

Come si lega il DropDown? Il codice che hai fornito funziona da parte mia con elementi statici. Forse è qualcosa negli altri controlli che sta causando il problema.

Ho notato che il tuo UpdatePanel ha la sua proprietà UpdateMode impostata su condizionale, tuttavia non hai definito alcun trigger. Puoi provare a impostare esplicitamente che il pannello di aggiornamento dovrebbe eseguire il postback asincrono quando il tuo dropdown attiva il suo eventoIndexChanged selezionato. È possibile utilizzare qualcosa come il seguente markup:

<asp:UpdatePanel ID="upMain" runat="server" UpdateMode="Conditional" Visible="true" 
    RenderMode="Inline"> 
    <ContentTemplate> 
     <asp:DropDownList ID="ddlNewService_PortTelco" runat="server" Width="250" 
      AutoPostBack="true" OnSelectedIndexChanged="Provision_PortedTelcoChanged"> 
     </asp:DropDownList> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ddlNewService_PortTelco" EventName="SelectedIndexChanged" /> 
    </Triggers> 
</asp:UpdatePanel> 
+0

Ciao! Grazie per la risposta. Ho provato ad aggiungere anche il trigger AsyncPostBack, ma non è stato d'aiuto. Non è nel mio esempio, come per quello che so se un OBJECT che causa un aggiornamento è INSIDE Update Panel, quindi non è necessario specificare il trigger. I trigger sono necessari per gli oggetti FUORI da UpdatePanel. Ho provato a cambiare UpdateMode su Sempre, ma non è stato d'aiuto. Sto già giocando con il codice, e ho notato che quando ho creato OTHER UpdatePanel subito dopo questo, e ho aggiunto codice identico all'interno, funzionava bene:/Quindi ci deve essere qualcosa all'interno di questo UpdatePanel che lo fa funzionare male. – user259119

2

Scusa la mia mancanza di capacità di programmazione: | Funzionava tutto il tempo, ma perché una delle pagine delle azioni "sembrava" come se fosse POST BACKED, quando non lo era. Che peccato!!!

Siamo spiacenti per il tuo tempo!

+2

puoi determinare se la pagina ha pubblicato postback completo o postback parziale qui: http://stackoverflow.com/questions/15893011/determine-if-and-which-partial-postback-occurred-in-pageload-with-javascript-i –

5

Hai il tuo elenco a discesa con un AutoPostBack impostato su true. Ecco perché lo fai postare invece di AsyncPostBack, se è quello che volevi.

Rimuovere il AutoPostBack=true dal DropDownList e impostare un Async trigger per il vostro UpdatePanel impostato su DropDownList e il suo eventname="SelectedIndexChanged"

17

ho avuto lo stesso problema ... ma nemmeno non sta mostrando nel codice copiato qui, controllare assicurarsi che non si dispone di alcun controllo con ClientIDMode = Statico all'interno del UpdatePanel .... li rendono ereditano

almeno tutti i controlli che possono scatenare un postback

+1

Ho esattamente lo stesso problema di OP descritto, e ho il mio dropdownlist con ClientIDMode = "Statico". Rimozione ClientIDMode appena risolto! Non l'avrei trovato se non ne avessi parlato! – Kagawa

+0

La modifica a ** inherit ** potrebbe non essere sufficiente. Se l'applicazione predefinita oi genitori sono con ClientMode ** static **, ** inherit ** non risolverà il problema.Deve essere impostato su ** AutoID ** o ** Prevedibile ** a garanzia che genererà il clientID corretto –

+0

Questo era il mio problema! Oh uomo CHE non è ovvio. Grazie! – n8wrl

1

L'impostazione dell'attributo AutoPostBack su true dovrebbe essere sufficiente a causare un postback parziale, ma non è ciò che accade e viene invece attivato un postback completo come descritto correttamente.

Il seguente soluzione funziona per me:

  1. goccia l'attributo AutoPostBack.
  2. Attiva il postback utilizzando l'evento lato client "onchange".

Questo è come la DropDownList originale dovrebbe essere simile:

<asp:DropDownList ID="ddlNewService_PortTelco" runat="server" Width="250" CssClass="dropdown" OnChange="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(this.name, '', true, '', '', false, true))" OnSelectedIndexChanged="Provision_PortedTelcoChanged"></asp:DropDownList> 

Per maggiori dettagli per quanto riguarda i WebForm_PostBackOptions parametri vedi sotto:

function WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit) 

http://msdn.microsoft.com/en-us/library/system.web.ui.postbackoptions_members(v=VS.90).aspx

4

Me avendo lo stesso problema ...

Controlla il tuo web.config

<xhtmlConformance mode="Legacy"/> 

per questa linea .. e semplicemente rimuovere !!

Ha funzionato per me. Grazie http://andrew-murphy.co.uk/?p=152

0

avuto lo stesso problema quando l'attributo DropDownList AutoPostBack è impostata su true e ha risolto il problema aggiungendo l'ID DropDownList al trigger UpdatePanel

0

ho avuto questo problema. Il mio Dropdownlist era all'interno di una tabella HTML e ho avuto il mio pannello di aggiornamento avvolto attorno a due singole righe. Ho risolto il problema avvolgendo il Pannello di aggiornamento sull'intero tavolo anziché solo sulle due righe.

2

Se si dispone di un componente asp con Autopostback="true" e ClientIdMode="Static", è necessario utilizzare il trigger.

Ti piace questa:

<asp:UpdatePanel ID="upPrinceOffuce" runat="server"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ddlPrintOffice" EventName="SelectedIndexChanged" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:DropDownList ID="ddlPrintOffice" runat="server" ClientIDMode="Static" AutoPostBack="true" ...blah blah 
</asp:DropDownList> 
    </ContentTemplate> 
</asp:UpdatePanel> 
+0

Quando uso il trigger, non è in grado di trovare DropDownList ... http://stackoverflow.com/questions/30352866/how-to-prevent-full-page-postback-on-selectedindexchange-for-dropdownlist – SearchForKnowledge

0

Un'alternativa per risolvere questo problema è:

dichiarare la biblioteca

using AjaxControlToolkit; 

Poi si può fare qualcosa su queste linee

private void InitControl() 
{   
      //FIX - DROP DOWN 
      ToolkitScriptManager scrManager = (ToolkitScriptManager)Page.Master.Controls[0].Controls[0].FindControl("manScript"); 
      scrManager.RegisterAsyncPostBackControl(ddlNewService_PortTelco); 
} 
+0

Can ' t trovare 'AjaxControlToolkit' – SearchForKnowledge

0

Imposta Aut valore oID alla proprietà ClientIDMode. Ha funzionato per me. Ho avuto un comportamento diverso in diversi browser (ad esempio Google Chrome e Firefox).

Problemi correlati