CodeBehind


CodeBehind

Das ASP.net Codebehind Prinzip trennt komplett den Code vom HTML, ähnlich einem Template System. Dabei werden alle gestalterischen Elemente, incl.
HTML Controls usw… in der .aspx Seite platziert, welche dann vom .net Code des Codes „hinter“ der .aspx Seite gesteuert und gefüllt werden. Es ist natürlich
auch weiterhin möglich, wie beim klassischen ASP oder PHP Code direkt in die aufzurufende Seite zu stecken und so mit HTML zu vermischen. Das sieht
ungefähr wie folgt aus:

<% @Page Language="C#" %>
<% @Import Namespace="System.IO" %>
<script language="C#" runat="server">
// Hier kommt der Code rein
</script >

Das ist zwar für kleine Skripte vom Vorteil aber bei schon mittelgroßen Anwendungen ist das CodeBehind Prinzip unschlagbar.

undefined

.method private hidebysig instance void
Button_Transfer_Click(object sender,
class [mscorlib]System.EventArgs e) cil managed
{
// Codegröße 23 (0x17)
.maxstack 3
IL_0000: ldarg.0
IL_0001: ldfld class [System.Web]System.Web.UI.WebControls.Label Schulung.Sample::Label_ShowResult
IL_0006: ldarg.0
IL_0007: ldfld class [System.Web]System.Web.UI.WebControls.TextBox Schulung.Sample::TextBox_Input
IL_000c: callvirt instance string [System.Web]System.Web.UI.WebControls.TextBox::get_Text()
IL_0011: callvirt instance void [System.Web]System.Web.UI.WebControls.Label::set_Text(string)
IL_0016: ret
} // end of method Sample::Button_Transfer_Click

Abbildung 2: IL Code

In der .aspx Seite befindet wird für gewöhnlich in der 1. Zeile die PageDirektive. In dieser wird unter anderem aufgeführt, wo sich der
Codebehind befindet. Ein Beispiel:

<%@ Page language="c#" Codebehind="counter.aspx.cs" AutoEventWireup="false" Inherits="aspnetTraining.counter" %>

Das Attribut CodeBehind gibt den Dateinamen an. Dieser ist relevant vor dem Deployment. Nach dem Deployment ist das Inherits für uns wichtiger. Es gibt an, von welcher Klasse (Angabe erfolgt inkl. Namespace) die aktuelle Seite erbt, also wo sich der Code genau in der Assembly befindet. Das generelle Problem hierbei, die CodeBehind Datei befindet sich in der Assembly (obwohl das Attribute CodeBehind hier etwas anderes vermuten lässt), also in einer der .dll Dateien im /Bin Verzeichnis der Applikation. Daher ist es hier nicht so einfach mal eben den Fremdcode zu überfliegen. Dies wäre zwar möglich aber ist mit großem Aufwand verbunden da 1. die Assembly disasambled werden muss und der daraus gewonnene IL Code ist nicht wirklich leicht zu Supporten ist daher zeigen wir mal eine einzige Methode aus einer einfachen Beispiel Schulungsassembly um das zu verdeutlichen.


  • 21.02.2018 15:12:58