Benutzer mit den meisten Antworten
Javascript Funktion aus CodeBehind

Frage
-
Hallo,
ich habe eine Javascriptfunktion, welche aus der CodeBehind Datei ausgeführt werden soll.
private void ShowTextWindow(string content, string col, string w, string h) { string script = "<script type='text/javascript'>"; script += "function FreeTextTest1() {"; script += "var windowproperties = 'scrollbars=no,width=" + w + "px,height=" + h + "px';"; script += "var windowstatictext = window.open('', 'NavigateWindow', windowproperties);"; script += "var ausgabe = '<html><body style=\"margin:0px; padding:0px; background-color:" + col + ";\">';"; script += "ausgabe += '" + content + "';"; script += "ausgabe += '</body></html>';"; script += "windowstatictext.document.write(ausgabe);"; script += "}"; script += "</script>"; ScriptManager.RegisterClientScriptBlock(this.Page, typeof(Page), "WindowOpenerText", script, false); }
Diese Funktion funktioniert jedoch nicht - Leider. Könnt Ihr mir bitte weiterhelfen? Wo liegt der Fehler?
lg
Claudia
Antworten
-
Hallo Claudia,
Du kannst von einem serverseitigen Skript aus keinerlei Interaktion mit dem Client starten, also auch keine clientseitigen JavaScript Funktionen aufrufen.
Was Du machst, ist, einen String in die HTML Ausgabe des Clients zu schreiben. Dieser String beinhaltet die Deklaration einer clientseitigen Funktion. Damit ist diese Funktion aber erstmal nur vorhanden. Aufgerufen wird die so nicht. Das musst Du dann schon noch mit einbauen, also bspw. per:
... script += "windowstatictext.document.write(ausgabe);"; script += "}"; script += "FreeTextTest1();"; script += "</script>";
Ob das nun das ist, was Du willst, weiß ich nicht. Ich denke aber, es müsste passen :)
---
Es wäre aber ehrlich gesagt sinnvoller, wenn Du das Zeugs mit window.open... weglassen und Dir stattdessen mal jQueryUI anschauen würdest. Damit kannst Du ziemlich einfach solche Popups generieren.
<div id="MyDialog" title="Zeig was an" class="Dialog"> <p><asp:Literal ID="MyDialogContent" runat="server" /></p> </div>
Damit hast Du ein Literal Control, dem Du serverseitig einen Inhalt zuweisen kannst.
In einer externen JavaScript Datei legst Du dir dann folgende Methode an:
function showDialog( dialogId ) { $( "#" + dialogId ).dialog({ modal: true, closeOnEscape: false, resizable: false, buttons: { Ok: function() { $( this ).dialog( "close" ); } }, width: 400 }); }
Im CodeBehind kannst Du dann wie oben gezeigt den Code für den Aufruf der Methode showDialog einbauen.
ScriptManager.RegisterClientScriptBlock( Me.Page, GetType( System.Web.UI.Page ), "ShowDialog", "showDialog( 'MyDialog' );", True )
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Donnerstag, 3. Mai 2012 22:52
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 10. Mai 2012 09:13
Alle Antworten
-
Hallo Claudia,
Du kannst von einem serverseitigen Skript aus keinerlei Interaktion mit dem Client starten, also auch keine clientseitigen JavaScript Funktionen aufrufen.
Was Du machst, ist, einen String in die HTML Ausgabe des Clients zu schreiben. Dieser String beinhaltet die Deklaration einer clientseitigen Funktion. Damit ist diese Funktion aber erstmal nur vorhanden. Aufgerufen wird die so nicht. Das musst Du dann schon noch mit einbauen, also bspw. per:
... script += "windowstatictext.document.write(ausgabe);"; script += "}"; script += "FreeTextTest1();"; script += "</script>";
Ob das nun das ist, was Du willst, weiß ich nicht. Ich denke aber, es müsste passen :)
---
Es wäre aber ehrlich gesagt sinnvoller, wenn Du das Zeugs mit window.open... weglassen und Dir stattdessen mal jQueryUI anschauen würdest. Damit kannst Du ziemlich einfach solche Popups generieren.
<div id="MyDialog" title="Zeig was an" class="Dialog"> <p><asp:Literal ID="MyDialogContent" runat="server" /></p> </div>
Damit hast Du ein Literal Control, dem Du serverseitig einen Inhalt zuweisen kannst.
In einer externen JavaScript Datei legst Du dir dann folgende Methode an:
function showDialog( dialogId ) { $( "#" + dialogId ).dialog({ modal: true, closeOnEscape: false, resizable: false, buttons: { Ok: function() { $( this ).dialog( "close" ); } }, width: 400 }); }
Im CodeBehind kannst Du dann wie oben gezeigt den Code für den Aufruf der Methode showDialog einbauen.
ScriptManager.RegisterClientScriptBlock( Me.Page, GetType( System.Web.UI.Page ), "ShowDialog", "showDialog( 'MyDialog' );", True )
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Donnerstag, 3. Mai 2012 22:52
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 10. Mai 2012 09:13
-
Hallo Claudia Salzwedel,
Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.