ASP.NET 2.0 bietet integrierte MasterPage-Unterstützung, was für uns eine große Annehmlichkeit ist. Nachdem ich es jedoch eine Zeit lang verwendet hatte, stellte ich fest, dass MasterPage nicht so perfekt ist: Die verschachtelte MasterPage kann die Design-Time-Schnittstelle nicht unterstützen, und das Problem beim Hinzufügen von CSS zur Inhaltsseite wird weiter unten erwähnt.
Vor 2.0 lautete die Syntax zum Hinzufügen einer CSS-Referenz zur Seite normalerweise wie folgt:
<link rel="stylesheet" href="css/test.css" />
Es war ursprünglich eine gängige Praxis. Aber auf einer Unterseite von MasterPage entsteht eine sehr peinliche Situation: Wo sollen wir den obigen Code einfügen?
Denn auf der spezifischen Inhaltsseite von MasterPage kann nur der Inhalt jedes <asp:Content />-Tags definiert werden. Gemäß der üblichen Praxis können wir den <header/>-Inhalt der Seite in ASPX nicht steuern. Und dieses <link/>-Tag muss innerhalb von <header/> platziert werden. Ich habe versucht, diese Codezeile in <asp:Content /> einzufügen, aber es wird ein Fehler angezeigt.
Gleichzeitig können wir keinen ContentPlaceHolder im <header/> von MasterPage für zukünftigen CSS-Referenzcode platzieren.
Also habe ich eine Hilfsklasse wie folgt definiert:
statische öffentliche Klasse ControlHelper
{
static public void AddStyleSheet(Page page, string cssPath)
{
HtmlLink-Link = new HtmlLink();
link.Href = cssPath;
link.Attributes["rel"] = "stylesheet";
link.Attributes["type"] = "text/css";
page.Header.Controls.Add(link);
}
}
Auf diese Weise können wir auf einer bestimmten Seite CSS-Referenzen durch den folgenden Code hinzufügen:
protected void Page_Load(object sender, EventArgs e)
{
ControlHelper.AddStyleSheet(this.Page, "css/projectPage.css");
}
Darüber hinaus unterstützt dieser Code die Verwendung in bestimmten Inhaltsseiten oder einer verschachtelten Masterseite.
An dieser Stelle fragen sich einige vielleicht, warum CSS auf diese Weise getrennt und geladen werden sollte. Ist es notwendig? Wäre es nicht schön, wenn ich das CSS für alle Seiten in ein paar gemeinsamen CSS-Dateien definieren würde?
Tatsächlich müssen Freunde, die mit der Web-Standard-HTML-Produktion vertraut sind, wissen, dass in einem relativ perfekten Zustand der HTML-Code der Seite und das für die Präsentation verwendete CSS vollständig getrennt sein sollten. Für unser auf Webstandards basierendes Design erstellen wir normalerweise zunächst einen Positionierungscode für jedes Frame-Div in der Masterseite sowie einen Änderungscode für die Kopf- und Fußzeilenteile. Diese werden von jeder Inhaltsseite verwendet und in einem einheitlichen CSS platziert. Für andere spezifische Inhaltsseiten verfügt jede Seite über ein eigenes Inhaltslayout und einen eigenen Änderungsstil. Daher füge ich die spezifischen Teile jeder spezifischen Seite in ein eigenes CSS ein. Dadurch entsteht ein CSS-Modell, das entsprechend der Implementierungsebene der Masterseite (die verschachtelt werden kann) Schicht für Schicht zusammengeführt wird. Der Vorteil besteht darin, dass die Trennung der Verantwortlichkeiten jeder CSS-Datei realisiert wird, was das Verständnis und die Wartung erleichtert.
Da ich ASP.NET 2.0 schon lange nicht mehr kennengelernt habe, ist das Obige nur eine kleine persönliche Erfahrung. Wenn es eine bequemere Lösung gibt, geben Sie mir bitte einen Rat.
http://rchen.cnblogs.com/archive/2006/05/23/masterpage_with_css.html