2010-01-26 16 views
6

Ich möchte meine asp.net-Seite aktualisieren, nachdem jemand auf eine Schaltfläche "Hinzufügen" klickt. Die Schaltfläche "Hinzufügen" ist jedoch Teil des Benutzersteuerelements in einem anderen Benutzersteuerelement, und das untergeordnete Steuerelement und das übergeordnete Steuerelement sind beide in Update Panels eingepackt: Code unten ist für die Anzeige abgeschnitten, es gibt einen Grund, dass das Benutzersteuerelement in einem anderen BenutzersteuerelementAktualisieren einer asp.net-Seite von einem Steuerelement in einem anderen Steuerelement

ist

Innen erste Steuer:

<ajax:UpdatePanel ID="Panel1" runat="server" UpdateMode="Always"> 
    <ContentTemplate> 
      <uc:Control2 ID="Custom2" runat="server" /> 
    </ContentTemplate> 
</ajax:UpdatePanel> 

Dann innen control2

<ajax:UpdatePanel ID="Panel2" runat="server" UpdateMode="Always"> 
    <ContentTemplate> 
      <asp:LinkButton ID="AddButton" runat="server" OnClick="AddButton_Click"</asp:LinkButton> 
    </ContentTemplate> 
</ajax:UpdatePanel> 
+0

In ähnlicher Weise hatte ich ein UserControl mit einem Add Button w/onclick -Ereignis in der UserControl (die einen Datensatz zu meiner Datenbank hinzugefügt). Nachdem Sie einmal auf die Schaltfläche "Hinzufügen" geklickt und anschließend auf die Schaltfläche zum Aktualisieren des Browsers geklickt haben, wird der Browser das Formular erneut bereitstellen und den erneuten Abruf des vorherigen Add-Ereignisses akzeptieren, was zu einem doppelten Add-Vorgang führt. Response.Redirect (übergeordnete Seite) hat das Problem behoben. Siehe Antwort von @ keltex. – condiosluzverde

Antwort

5

Wenn Sie die gesamte Seite (und nicht nur den Inhalt der Update) neu laden wollen Sie tun können:

+0

Die Seite wird dynamisch generiert. Kann ich etwas wie Response.Redirect (Page.Url) oder so etwas tun. – user204588

+1

Ja. Das würde wahrscheinlich funktionieren. Response.Redirect (Page.Request.Url.Absoluter Pfad) – Keltex

1

Angenommen, Sie haben keine Kontrolle über das übergeordnete Benutzersteuerelement, können Sie das Steuerelement finden, indem Sie die untergeordneten Steuerelemente des übergeordneten Benutzersteuerelements (FindControl) durchsuchen. Dann, wenn Sie den Verweis auf sie haben könnten Sie einen Ereignishandler hinzu:

btnAddButton.OnClick += new EventHandler(MethodThatRefreshesPage); 

Da Sie in Update-Panels sind, dann würden Sie brauchen so etwas wie Response.Redirect(Request.RawUrl) tun, um die gesamte Seite zu aktualisieren.

Natürlich, wenn Sie Kontrolle über das übergeordnete Benutzersteuerelement haben, erstellen Sie Ihr eigenes "AddClicked" -Ereignis und übergeben Sie die Abonnements bis zur Verknüpfungsschaltfläche..oder Sie könnten einfach das LinkButton selbst als öffentliche Eigenschaft auf die Benutzerkontrolle.

0

Ich gehe davon aus, dass Sie die Seite aktualisieren möchten, so dass das neue hinzugefügte Element auf der Seite angezeigt wird ... richtig? Wenn dies der Fall ist, können Sie Ihr Datensteuerelement als Teil des AddButton_Click-Ereignisses datenbankgesteuert verarbeiten. Wenn Sie beispielsweise ein Raster mit Elementen haben und ein Benutzer auf die Schaltfläche Hinzufügen klickt, um ein neues Element hinzuzufügen, können Sie den folgenden Code in das AddButton_Click-Ereignis einfügen, um den Inhalt des Datensteuerelements zu "aktualisieren" und das neu hinzugefügte Element anzuzeigen Artikel:

protected void AddButton_Click(object sender, EventArgs e) 
    { 
     myGrid.DataBind(); 
    } 

Hoffe, das hilft.

0

Sie geben nicht die Konfiguration Ihres Script Manager jedoch vorausgesetzt, Sie ein Skript-Manager wie folgt konfiguriert haben:

<ajax:ScriptManager runat="server" ID="myScriptManager" EnablePartialRendering="true"></ajax:ScriptManager> 

Dann fügen Sie diesen Trigger auf die Update Vorlage für Control2 so dass es wie folgt aussieht:

<ajax:UpdatePanel ID="Panel2" runat="server" UpdateMode="Always"> 
    <ContentTemplate> 
     <asp:LinkButton ID="AddButton" runat="server" OnClick="AddButton_Click"</asp:LinkButton> 
    </ContentTemplate> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="AddButton" /> 
    </Triggers> 
</ajax:UpdatePanel> 

Dies wird einen Postback auslösen, die Sie gebundene Daten (in Page_Load) und wird auch wieder machen die ganze Seite und nicht nur den Inhalt Ihres inneren Update-Panel neu zu laden können.

Verwandte Themen