Come posso ottenere un pulsante che si trova all'interno di un asp: UpdatePanel per aggiornare l'intera pagina?

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

Domanda

Ho un pulsante all'interno di un pannello di aggiornamento che vorrei aggiornare l'intera pagina. Ho impostato ChildrenAsTriggers = " false " e UpdateMode = " Conditional " .

Ho un codice di esempio qui che dimostra il mio problema.

<asp:UpdatePanel ID="myFirstPanel" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
   <ContentTemplate>
      <asp:Button runat="server" ID="myFirstButton" Text="My First Button" onclick="myFirstButton_Click" />
      <asp:Button runat="server" ID="mySecondButton" Text="My Second Button" onclick="mySecondButton_Click" />
   </ContentTemplate>
</asp:UpdatePanel>

<asp:UpdatePanel ID="mySecondPanel" runat="server">
   <ContentTemplate>
       <asp:Label runat="server" ID="myFirstLabel" Text="My First Label"></asp:Label>
    </ContentTemplate>
    <Triggers>
       <asp:AsyncPostBackTrigger ControlID="myFirstButton" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>
<asp:Label runat="server" ID="mySecondLabel" Text="My Second Label"></asp:Label>

E il codice dietro:

protected void myFirstButton_Click(object sender, EventArgs e)
{
  myFirstLabel.Text = "Inside Panel " + DateTime.Now.ToString("mm:ss");
}
protected void mySecondButton_Click(object sender, EventArgs e)
{
  mySecondLabel.Text = "Outside Panel " + DateTime.Now.ToString("mm:ss");
}

Voglio aggiornare l'etichetta che non si trova all'interno di un pannello di aggiornamento quando si fa clic sul secondo pulsante. Il secondo pulsante deve trovarsi in un pannello di aggiornamento. Non voglio mettere l'etichetta in un pannello di aggiornamento.

È stato utile?

Soluzione

Prova ad aggiungere un trigger PostBack al primo UpdatePanel, per il secondo pulsante. Questo dirà a quel pannello di aggiornamento che il pulsante dovrebbe fare un postback completo.

Altri suggerimenti

ScriptManager.GetCurrent (Pagina) .RegisterPostBackControl (pulsante); risolverà il tuo problema

Se aggiungi un PostBackTrigger al primo pannello di aggiornamento in questo modo

<Triggers>
   <asp:PostBackTrigger ControlID="mySecondButton" />
</Triggers>

Questo causerà il ritorno di un post completo quando si fa clic sul secondo pulsante. Questo è esattamente il comportamento che stavo cercando.

Ho avuto un caso simile ma leggermente più complesso e mi ci è voluto più di un giorno per capire questa risposta. (La risposta è essenzialmente la stessa di quella fornita da @serkan. Mi sto solo espandendo.) Avevamo un controllo utente ASP.NET che aveva un pulsante che, quando cliccato, generava un'immagine e innescava un download dell'immagine . Funzionava magnificamente su una pagina normale, ma per nulla quando il controllo utente era incorporato in un pannello di aggiornamento. Non sono riuscito a capire come dire al pannello di aggiornamento di eseguire un postback regolare solo per questo pulsante, soprattutto perché il pulsante era sotto il controllo dell'utente senza un accesso ovvio ad esso dalla pagina che lo utilizzava.

Ciò che alla fine ha funzionato è stato estremamente semplice. Non è stato necessario provare a specificare il trigger postback per il pannello. Piuttosto, nel Page_Load del controllo utente, ho aggiunto quanto segue:

    protected void Page_Load(object sender, EventArgs e)
    {
        // If the chart is within an update panel then we need to tell the script manager
        // to not do an asynch postback on chartdownload.  If we don't, the download
        // doesn't work.
        var scriptManager = ScriptManager.GetCurrent(Page);
        if (scriptManager != null)
        {
            scriptManager.RegisterPostBackControl(ChartSaveButton);
        }
        // Rest of Page_Load followed here...

Inoltre, ho creato la proprietà ChartSaveButton per ottenere un facile accesso al controllo per il pulsante:

    private Control ChartSaveButton
    {
        get { return FindControl("btnDownloadChart"); }
    }

(" btnDownloadChart " è l'ID del pulsante.)

È stata una strada dolorosa per arrivare qui, ma sono soddisfatto che la soluzione sia così elegante. Spero che questo ti possa aiutare.

per me, questa configurazione non ha senso. tieni presente che mentre i pannelli di aggiornamento possono essere un ottimo modo per ottenere un effetto simile a Ajax molto facilmente, non sono ideali in tutte le situazioni.

se l'architettura della tua pagina richiede la disposizione degli elementi come hai nel tuo esempio, potresti essere meglio guardando i metodi di pagina o di servizio con javascript per aggiornare l'etichetta.

Se l'etichetta non si trova in un pannello di aggiornamento, l'unico modo per aggiornare il valore è aggiornare l'intera pagina come in un normale postback. Dovresti fare un reindirizzamento alla stessa pagina per aggiornarlo. Il framework ajax sa gestire i reindirizzamenti anche se la richiesta proviene da un pannello di aggiornamento, quindi basta fare un Response.Redirect (...) sul pulsante click.

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