Wie erhalte ich eine Schaltfläche, die innerhalb eines asp ist: Update die ganze Seite zu aktualisieren?

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

Frage

Ich habe eine Schaltfläche innerhalb eines Update-Panel, Ich mag würde die ganze Seite aktualisieren. Ich habe festgelegt ChildrenAsTriggers="false" und UpdateMode="Conditional".

Ich habe einigen Beispielcode hier, dass mein Problem veranschaulicht.

<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>

Und der Code hinter:

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");
}

Ich mag das Etikett aktualisieren, die nicht innerhalb eines Update-Panel ist, wenn die zweite Schaltfläche geklickt wird. Die zweite Schaltfläche muss in einem Update-Panel sein. Ich will nicht das Label in einen Update-Panel setzen.

War es hilfreich?

Lösung

Versuchen Sie, einen Postback-Trigger zum ersten Update Zugabe für die zweite Taste. Das wird der Update-Panel sagt, dass die Schaltfläche soll eine vollständige Postbacks machen.

Andere Tipps

ScriptManager.GetCurrent (Seite) .RegisterPostBackControl (Taste); lösen Ihr Problem

Wenn Sie eine Postback zum ersten Update-Panel hinzuzufügen, wie so

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

Dies wird einen vollständigen Beitrag dazu führen, wieder zu geschehen, wenn die zweite Schaltfläche geklickt wird. Dies ist das genaue Verhalten, das ich suchte.

Ich hatte einen ähnlichen, aber etwas komplizierten Fall und es dauerte mehr als einen Tag, um diese Antwort herauszufinden. (Die Antwort ist im Wesentlichen die gleiche wie die von @serkan gegeben. Ich erweitere einfach darauf.) Wir hatten eine ASP.NET-Benutzersteuerung, die eine Schaltfläche hatte, die, wenn sie angeklickt, wird ein Bild erzeugt und löste einen Download des Bildes . Das funktionierte sehr schön auf einer normalen Seite, aber nicht, wenn der Benutzer der Kontrolle wurde in einem Update-Panel eingebettet. Ich konnte nicht herausfinden, wie Sie den Update-Panel zu sagen, eine regelmäßige Postbacks für nur diesen Knopf zu tun, vor allem, da die Taste ohne offensichtlichen Zugriff darauf von der Seite innerhalb der Benutzersteuerung war es zu benutzen.

Was schließlich arbeitete, war sehr einfach. Es bestand keine Notwendigkeit zu versuchen, die Postbacks Auslöser für die Platte zu spezifizieren. Vielmehr in der Page_Load des Benutzersteuerung, Ich habe folgende:

    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...

Darüber hinaus habe ich die ChartSaveButton Eigenschaft einfachen Zugriff auf die Steuerung für die Schaltfläche erhalten:

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

( "btnDownloadChart" ist die ID der Schaltfläche.)

Es war ein schmerzhafter Weg zu sich kommen, aber ich bin erfreut, die Lösung so elegant ist. Ich hoffe, dies wird Ihnen helfen.

zu mir, ist diese Einstellung nicht sinnvoll. bedenken Sie, dass während Update-Panels sehr leicht eine gute Möglichkeit, zu erreichen, eine Ajax-ähnliche Wirkung sein können, sie in allen Situationen nicht ideal ist.

, wenn Ihre Seite Architektur, die die Anordnung von Elementen erfordert, wie Sie in Ihrem Beispiel haben, können Sie besser dran seinen Blick auf Verwendung Seite oder Service-Methoden mit Javascript um das Etikett zu aktualisieren.

Wenn das Etikett nicht in einem Update-Panel ist der einzige Weg, um den Wert zu aktualisieren ist durch die gesamte Seite wie in einem normalen Postback erfrischend. Sie müßten eine Umleitung auf die gleiche Seite zu tun, es zu aktualisieren. Der Ajax-Framework kennt die Umleitungen auch zu handhaben, wenn die Anforderung von einem Update-Panel ist so einfach tun, eine Response.Redirect (...) auf den Button klicken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top