Mehr von Jürgen Gutsch

Mehr von Jürgen Gutsch

Empfehlungen von Jürgen Gutsch

Blog-Empfehlungen von Jürgen Gutsch

Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Jürgen Gutsch

ASP.NET und mehr...

News

Webentwicklung: Unterschiede zwischen Client- und Server-Programmierung

Immer wieder kommt es bei ASP.NET Anfänger zu logischen Missverständnissen, wenn im laufe des Projektes der Zeitpunkt kommt, in dem Clientseitige Aktionen vorgenommen werden müssen.

Von Clientseitig sprechen wir, wenn wir Funktionen umsetzen die auf dem Client ausgeführt werden sollen. Der Client ist dabei immer der Browser und dessen Umgebung, also der Browser und das Betriebssystem. Clientseitige Funktionen sind zum Beispiel das öffnen eines neuen Fenster, die Reaktion auf eine Aktion des Benutzers (Klick auf einen Button).
Clientseitige Aktionen werden in der Regel mit JavaScript, aber auch mit JScript und VBScript und sehr begrenzt auch mit CSS (über Pseudoklassen) umgesetzt und durchgeführt.

Serverseitig dagegen sind Aktionen die auf dem Server (Webserver, IIS) ausgeführt werden sollen. Z. B: Auslesen von Daten aus einer Datenbank, Darstellung der Daten in Form von HTML, etc. Serverseitige Aktionen werden mit Sprachen umgesetzt, die über einem Webserver ausgeführt werden. Mit ASP.NET sind das üblicherweise C# und VB.NET. (Mit anderen Techniken: Perl für CGI, VBScript für classic ASP usw.)

Vielen ist am Anfang nicht bewusst was nur auf dem Client funktioniert und was nur auf dem Server umgesetzt werden kann. So ist es z. B: nicht möglich nur mit C# ein neues Browserfenster zu öffnen oder nur mit JavaScript eine Datenbankabfrage vorzunehmen.

Um die Verwirrung komplett zu machen, gibt es - der Vollständigkeit halber - natürlich auch Aktionen die sowohl serverseitig als auch clientseitig durchgeführt werden können, wie z. B: das lesen und schreiben von Cookies oder das Umleiten auf eine andere Seite.

Man kann dennoch größtenteils davon ausgehen das Funktionen die auf dem Client nur mit JavaScript (oder einer anderen Clientsprache) ausgeführt werden können. Andersherum können Funktionen auf dem Server größtenteils nur mit einer serverseitigen Sprache wie C# oder VB.NET umgesetzt werden.

Wie sollte man, bzw. kann man nun vorgehen um solche Verwechslungen zu vermeiden?

Man sollte sich bewusst machen wo die gewünschte Funktion ausgeführt werden soll. Damit ist dann schon die meiste Arbeit getan. Dann geht es nur noch darum zu recherchieren wie die Funktion umgesetzt werden kann.

Wenn es doch nur so einfach wäre, gelle? ;-)

Bestimmte Anforderungen bringen alle Anfänger durcheinander, z. B. das Anzeigen einer MessageBox aufgrund eines am Server aufgetretenen Ereignisses. Vor allem dann, wenn folgender Code tatsächlich funktioniert:

MessageBox.Show("Es ist ein Fehler aufgetreten!!!!");

Allerdings funktioniert dieser Code nur so lange, bis die fertige Anwendung auf einen entfernten Webserver geschoben wird, um sie dem Auftraggeber zu zeigen. Denn die mit C# erzeugte MessageBox wird nur auf dem Server angezeigt. Wenn der Client-Computer gleichzeitig auch der Server ist - wie es bei Entwicklungsrechnern fast immer der Fall ist - wird die Box natürlich ordnungsgemäß angezeigt. Wird die Anwendung hingegen auf einem entfernten Server ausgeführt, würden die Boxen dort aufgehen, statt auf dem Client-Computer, denn der Aufruf ist rein serverseitig passiert.

Also muss clientseitiger Code her:

alert("Es ist ein Fehler aufgetreten!!!!");

Dieser clientseitige Code muss auf dem Server erzeugt werden und anschließen auf dem Client ausgeführt werden. Da eine ASP.NET Seite immer erst auf dem Server verarbeitet wird, ist es also problemlos möglich auf dem Server Code zu erzeugen, der auf dem Client ausgeführt werden soll:

ClientScript.RegisterStartupScript(typeof(Page), "msgbox", "alert(\"Es ist ein Fehler aufgetreten!!!!\");", true);
http://msdn.microsoft.com/de-de/library/z9h4dk8y.aspx

Dieser Code erzeugt folgende Ausgabe vor dem schließenden <form>-Tag im HTML:
<script type="text/javascript">alert("Es ist ein Fehler aufgetreten!!!!");</script>

Dieser Code wird ausgeführt, sobald die Seite zum größten Teil vom Browser geladen ist. Auf diese Art ist es möglich JavaScript für den Client zu erzeugen und sofort ausführen zu lassen.

Auf eine Ganz ähnliche Weise kann per Servercode eine clientseitige Funktion bereitgestellt werden die zu einem beliebigen Zeitpunkt am Client ausgeführt werden kann:

StringBuilder script = new StringBuilder();
script.AppendLine("function showMessage(strMsg) {");
script.AppendLine("alert(\"Nachricht: \" + strMsg);");
script.AppendLine("}");
ClientScript.RegisterClientScriptBlock(typeof(Page), "msgbox", script.ToString(), true);

http://msdn.microsoft.com/de-de/library/bahh2fef.aspx

Dieser Clientcode wird nach der geöffneten <form>-Tag eingefügt:
<script type="text/javascript">
function showMessage(strMsg) {
alert("Nachricht: " + strMsg);
}</script>

Zum Beispiel kann man jetzt dem Button folgende Clientaktion setzen:
myButton.OnCLientClick = String.Format("showMessage('{0}');", "Hallo Welt");
http://msdn.microsoft.com/de-de/library/system.web.ui.webcontrols.button.onclientclick.aspx

Man sollte sich stets in Erinnerung halten, dass ASP.NET in erster Linie HTML erzeugt, das von Browsern interpretiert und angezeigt wird. Und wie wir von HTML Dateien wissen können diese JavaScripts (Clientscripts) enthalten die von den Browsern ausgeführt werden können. Wir können also dafür sorgen, dass unser ASP.NET zu dem HTML auch JavaScript zur Verfügung stellt.

AJAX und Co.

ASP.NET AJAX und JavaScript-lastige Controls verwaschen leider immer mehr die Grenzen zwischen Client und Server, indem es immer mehr möglich wird, per serverseitigem Code Aktionen auf dem Client zu tätigen, oder umgekehrt. In Wirklichkeit werden aber auch hier unter anderem nur clientseitige Funktionen serverseitig zur Verfügung gestellt oder clientseitig Ressourcen auf dem Server aufgerufen, die wiederum dort Aktionen ausführen und gegebenenfalls ein Resultat an den Client zurückgeben.

Siehe auch: AJAX oder doch Javascript?

Posted: Mittwoch, 15. Oktober 2008 06:55 von Jürgen Gutsch

Kommentare

Peter Bucher sagte:

Sally Jürgen

Na das ist doch mal was.

Super geschrieben! :)

Bei "Grenzen verwaschen" ist es halt so, dass man vielfach unwissentlich oder unnötig einen Roundtrip macht, um bspw. eine Methode serverseitig ausführen zu lassen und das Ergebnis zum Client schickt.

Und das obwohl die ganze Geschichte auch komplette auf dem Client laufen könnte.

Du hast das gut formuliert.

Auf jeden Fall einen Eintrag zum verlinken!

# Oktober 15, 2008 11:23

Jürgen Gutsch sagte:

Hi Peter,

danke für dein Lob :-)

>> Auf jeden Fall einen Eintrag zum verlinken!
Jep, ich wollte auch mal endlich so was schreiben, wie dein Artikel über die Control-IDs, der überall verlinkt wird ;-)

# Oktober 15, 2008 11:35

Peter Bucher sagte:

Sally Jürgen

Gern geschehen!

Aha, soso *g* ;-)

# Oktober 15, 2008 13:14

Stefan Falz sagte:

Wow :)

http://msdn.microsoft.com/de-de/asp.net/default.aspx

Du hast es auf die deutsche ASP.NET Startseite der MSDN geschafft. Respekt.

# Oktober 25, 2008 12:21

Rene Drescher-Hackel sagte:

Wichtig zu erwähnen dabei wäre, dass der Entwickler immer bedacht sein sollte Logik am Server zu halten und nicht am Client. Das ist letztlich eines der Hauptgründe, warum es immer wieder zu Missverständnissen zwischen Client und Server kommt.

Rene

# Dezember 16, 2008 09:05

Jürgen Gutsch sagte:

Hallo Rene,

jep, es ist richtig die Logik am Server zu halten,m sofern das möglich ist.

Was aber eben nicht möglich ist, aber dennoch immer wieder versucht wird, ist das serverseitige öffnen eines neuen Browserfensters...

# Dezember 17, 2008 06:59

Jürgen Gutsch sagte:

Ach ja. Es gab damals noch so was wie HTML, CSS und JavaScript, aber das ist ja heutzutage blöd, schließlich

# März 12, 2009 15:43
Anonyme Kommentare sind nicht zugelassen