2009-08-25 4 views

Antwort

12

ich Sie in diesem MSDN Page (ASP.NET Seite Klasse Übersicht) beziehen würde.

Wenn die Seite kompiliert wird, ASP.NET erzeugt eine Teilklasse auf der Grundlage der ASPX- Datei; Diese Klasse ist eine partielle Klasse der CodeBehind-Klassendatei. Die generierte partielle Klassendatei enthält Deklarationen für die Steuerelemente der Seite. Diese partielle Klasse ermöglicht Ihre Code-Behind-Datei als Teil einer vollständigen Klasse ohne verwendet werden, erfordern Sie explizit die Steuerelemente zu deklarieren.

Siehe nachstehende Tabelle:

alt text http://img30.imageshack.us/img30/7692/msdnchart.gif

diese Weise können Sie eine Klasse, die Ihre Logik und eine Klasse enthält, die Designer-Stoff enthält. Zur Kompilierzeit wird es als Ganzes generiert.

+1

Dies ist einer dieser "lassen Sie ein Diagramm aus etwas, das kein Diagramm sein sollte" Diagramme. – womp

+0

"Das Vererbungsmodell für Code-Behind-Seiten ist etwas komplexer als das für Einzelseiten" Abschnitt in Dieser MSDN-Artikel war sehr hilfreich, um dieses Diagramm besser zu verstehen –

4

Da gibt es andere Teile der Klasse (Designer-Material), das von dem Entwickler

Zum Beispiel, statt dieser

public MyBasePage : System.Web.UI.Page 
{ 
    ... 
    protected System.Web.UI.Label lblName; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
    ... 
} 

ASP.NET versteckt schafft diese Erklärungen in verschiedenen physischen Dateien, so dass diese

public partial class MyBasePage : System.Web.UI.Page 
{ 
    ... 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    ... 
} 

Weitere Informationen:

+0

könnten Sie es ausarbeiten? Ähnelt es der winforms-Designer-Datei? – andrewWinn

+0

@andrewWinn - yep, es entspricht der winforms-Designer-Datei - in ASP.NET 1.1 gäbe es alle Steuererklärungen ganz oben im Code-Behind, und dann würde ein minimierter Bereich am unteren Rand kommentiert in den Zeilen " Designer erstellt, nicht ändern "wo alle Ereignisse verdrahtet waren. –

+0

@jaun, der von Ihnen angegebene Link funktioniert nicht. – ShaileshDev

1

Die partielle Deklaration ermöglicht es Ihnen, Code in andere Dateien zu schreiben - setzen Sie ihn einfach in den gleichen Namespace und benennen Sie die Klasse gleich, und sie werden so behandelt, als befänden sie sich in derselben Datei. Es eignet sich hervorragend zum Hinzufügen von Funktionen zu generierten Dateien. Ich verwende es am häufigsten, um meinen LinqToSql-Objekten Funktionen/Eigenschaften hinzuzufügen.

+0

Plus es hilft, den ganzen hässlich generierten Code von Ihnen fernzuhalten es versehentlich bearbeiten. Du musst jetzt viel zielgerichteter sein, um es zu bearbeiten .... :) – klabranche

1

Der andere Grund für partielle Dateien ist, den Fall zu behandeln, wo ein Teil der Klassendefinition von einem Werkzeug erzeugt wird (und möglicherweise irgendwann neu generiert wird) und der Rest der Klasse von Ihnen implementiert wird.

In solchen Fällen würde die Verwendung einer partiellen Klasse dazu führen, dass entweder Ihr Code überschrieben wird oder der Generierungsprozess Schwierigkeiten hat, seine Aufgabe zu erledigen (wenn es überhaupt möglich ist).

Mit den vorhandenen partiellen Klassen kann der generierte Code leicht neu generiert werden, ohne den Code zu berühren. Ein weiteres gutes Beispiel hierfür ist die Verwendung der DataContext-Klassen für LINQ-to-SQL: Die wirklich cleveren Sachen werden in einem Satz von partiellen Klassendateien erzeugt und Sie können Implementierungen - für die Validierung usw. - in den anderen partiellen bereitstellen Klasse, sicher in dem Wissen, dass Re-Generation deine Arbeit nicht zerstören wird.

0

Aspx.cs verwendet die PARTIAL-Klasse, da die Steuerelemente (z. B. TextBox, GridView), auf die in dieser Klasse zugegriffen wird, in der .Aspx-Datei deklariert sind (d. H.Physisch eine andere Datei), also enthält eine Klasse Steuerelement-Deklaration (.aspx-Datei) und eine andere Geschäftslogik, die auf Steuerelementen basiert, die für ASPX-Datei deklariert werden. wenn sie kompiliert werden, gilt das Ganze als eine einzige Klasse.