2016-08-09 21 views
0

Der folgende Code wird verwendet, um Popup-Fenster von Telerik (Radwindow) in Aspx-Seite anzuzeigen. Es zeigt erfolgreich das Fenster mit dem folgenden aktuellen Code an.Wie Telerik RadWindow von Code-Behind von UserControl angezeigt wird

Wie kann ich Popup-Fenster von ASP.NET Usercontrol anzeigen?

RadWindowManager windowManager = new RadWindowManager(); 
RadWindow window1 = new RadWindow(); 

window1.NavigateUrl = "Window1.aspx"; 
window1.ID = "RadWindow1"; 
window1.VisibleOnPageLoad = true; // Set this property to True for showing window from code 
windowManager.Windows.Add(window1); 
this.form1.Controls.Add(window1); 

Antwort

1

Sie können, natürlich, aber es gibt zwei Probleme mit diesem Ansatz:

  • die Steuer Benutzer wird über den Fenstermanager und Fenster auf der Masterseite muss wissen, durchqueren die Kontrollen Hierarchie und finden Sie sie

  • Wenn Sie das gesamte Snippet zum Benutzer Steuerelement hinzufügen, werden Sie am Ende mit mehreren Fenster-Manager-Instanz und das kann ein paar Tricks auf Sie spielen (siehe here).

Also, denken Sie über die folgenden Ideen:

  • eine RadWindow Instanz mit dem Steuer Benutzer hinzufügen (kein RadWindowManager) und das allein verwenden. Lesen Sie this article, um ein Skript vom Server zu registrieren, um es zu öffnen, und this article, um die JS-Funktionen zu machen, die Sie möglicherweise für jedes Benutzersteuerelement benötigen.

  • Öffnen Sie das RadWindow rein von der Client-Seite wie gezeigt here. Sie können register a JS function from the server, die die Parameter übergeben Sie benötigen (URL, Modalität, was auch immer)

Hier eine Beispielimplementierung einer der Ideen ist (dass ich mit gehen), basierend auf Ihren Kommentar:

Master-Seite

 <telerik:RadWindowManager ID="RadWindowManager1" runat="server"></telerik:RadWindowManager> 
     <script> 
      function openDialog(url, modal, width, height) { 
       if (radopen) { //if not, there is no RadWindowManager on the page, add an else{} block to use window.open() or other logic 
        var wnd = radopen(url, null); 
        wnd.set_destroyOnClose(true); 
        //add checks here in case parameters have not been passed 
        wnd.setSize(width, height); 
        wnd.center(); 
        wnd.set_modal(modal); 
       } 
      } 
     </script> 

Benutzerverwaltung Markup

<asp:Button ID="Button1" Text="open RW" OnClick="Button1_Click" runat="server" /> 

Verwenden Steuercode-behind

protected void Button1_Click(object sender, EventArgs e) 
{ 
    bool flag = true; 
    if(flag) 
    { 
     string script = string.Format("function f(){{openDialog('{0}', {1}, {2}, {3});Sys.Application.remove_load(f);}}Sys.Application.add_load(f);", 
            "the-page.aspx", 
            "true", 
            600, 
            400); 
     ScriptManager.RegisterStartupScript(Page, Page.GetType(), "someKey", script, true); 
    } 
} 
+0

Ja. Du hast recht. Ich habe UserControls und Masterseiten. Ich muss RadWindow nur von der Serverseite anzeigen. Beim Klicken auf die Schaltfläche "Speichern" werden einige Berechnungen durchgeführt und wenn die Speicherbedingungen nicht erfüllt werden, muss das Telerik RadWindow dynamisch angezeigt werden. Ich stimme dir zu. Könnten Sie mir bitte eine einfachere Lösung anbieten? –

+0

Ich habe ein Beispiel für eine wiederverwendbare Implementierung hinzugefügt, die ich in einem solchen Fall gemacht hätte. Natürlich, Refaktor und zwicken ein bisschen, es ist nur ein Beispiel – rdmptn

+0

Großartig. Aber warum sollte ich die Masterseite berühren? Kann es in der aspx-Seite getan werden, die das Benutzersteuerelement hostet? Ich warte gespannt auf Ihre Antwort. –