2010-11-23 21 views
2

Wie verhindere ich, dass ein ModalPopupExtender das Popup anzeigt, wenn ein Benutzer über die Zurück-Schaltfläche des Browsers zur Seite navigiert?ModalPopupExtender zeigt ein Popup an, wenn der Benutzer die Zurück-Taste drückt

Ich habe versucht, die gefundene Lösung here zu implementieren, die im Wesentlichen das ModalPopup mit clientseitigem Skript handhabt, aber Probleme mit seiner Implementierung hatte. ($ find ("modPop") gibt immer null zurück).

Gibt es andere Techniken, um dies zu handhaben?

EDIT: Das Grundstück verdickt. Dies geschieht nur, weil ich ein UpdatePanel innerhalb des Popups verwende. Der folgende Code sollte den Fehler duplizieren. Beachten Sie auch, dass die Verwendung der Dummy-Schaltfläche erforderlich ist.

  1. Click-Taste modal
  2. bestätigen modal
  3. Navigieren weg zu zeigen, ab Seite
  4. Navigation zurück zur Seite w/Zurück-Taste
  5. Modal unerwünschte Weise erscheint.
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Test.aspx.vb" Inherits="Test" %> 
<form id="form1" runat="server"> 
<div> 
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"> </asp:ScriptManager> 

<span style="display:none;"><asp:Button ID="btnDummy" runat="server" Text="Dummy" /></span> 
<asp:Button id="btnShow" runat="server" Text="Show Modal"/> 
<ajax:ModalPopupExtender ID="mpTest" runat="server" TargetControlID="btnDummy" PopupControlID="pnlTest"></ajax:ModalPopupExtender> 
<asp:Panel id="pnlTest" style="display:none;border:10px solid green" DefaultButton="btnTest" runat="server">   
<asp:UpdatePanel ID="upTest" runat="server"> 
<ContentTemplate> 
     <asp:Button ID="btnTest" runat="server" Text="Test" />   
</ContentTemplate> 
<Triggers> 
    <ajax:AsyncPostBackTrigger ControlID="btnTest" /> 
</Triggers> 
</asp:UpdatePanel> 
</asp:Panel> 
<a href="http://stackoverflow.com">StackOverflow</a> 
</div> 
</form> 
Partial Class Test 
    Inherits System.Web.UI.Page 

    Protected Sub btnShow_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnShow.Click 
     mpTest.Show() 
    End Sub 

    Protected Sub btnTest_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnTest.Click 
     mpTest.Hide() 
    End Sub 

End Class

Ich denke, das macht Sinn, als wenn Sie die modale eine vollständige Postbacks bestätigen nicht geschehen ist, aber ich muss es auf diese Art und Weise tun. Gibt es Workarounds?

Antwort

0

In der Lösung im ASP.NET-Forum ist die modPop in $find("modPop") die Verhaltens-ID des modalen Popup, die in Ihrem Fall mpTest sein wird. Versuchen Sie explizit BehaviorId="mpTest" auf Ihrem ModalPopupExtender auch zu setzen und zu sehen, ob es funktioniert.

+0

So habe ich die Lösung ursprünglich getestet und es hat nicht funktioniert. – plntxt

+0

Versuchen Sie explizit, die 'BehaviorId' des modalen Popups zu setzen – batwad