Die <%@ Page %>-Direktive in ASP.NET 2.0 um benutzerdefinierte Attribute erweitern

Im Artikel „Obscure but cool feature in ASP.NET 2.0“ schreibt Scott Guthrie darüber, wie die Page-Direktive um eigene Attribute erweitert wird.

Z. B.

<%@ Page 
	Language="C#" 
	Message="My Test Message String"
	Inherits="BasePage"%>

Dabei ist das „Language“-Attribut und das „Inherits“-Attribut ein eingebautes Attribut, das „Message“-Attribut ist ein benutzerdefiniertes.

Ich habe das mit der RTM-Version (also der endgültig freigegebenen Version) von ASP.NET 2.0 probiert, so wie von Scott beschrieben, bin aber erst mal auf den Fehler gelaufen:

Build (web): Fehler beim Analysieren des Attributs message: Der Typ System.Web.UI.Page hat keine öffentliche Eigenschaft mit dem Namen message.

Da Scott den Artikel mit der Version Beta 1 von ASP.NET 2.0 geschrieben hat, hat sich da wohl was geändert intern. Er schreibt das auch in einem entsprechenden Kommentar zu seinem Artikel, verschweigt aber wie genau das gemacht wird.

Nun, die Lösung ist ganz einfach (wie immer, wenn man weiß wie:

Das „CodeFileBaseClass„-Attribut muß auch in der Page-Direktive angegeben werden, und zwar mit dem Namen der Basisklasse, und nicht mit dem Namen der CodeBehind-Klasse.

Z. B.

<%@ Page 
	Language="C#" 
	CodeFileBaseClass="BasePage" 
	Message="My Test Message String"  
	Inherits="BasePage"%>

Dann sollte es korrekt funktionieren. In einem konkreten Fall habe ich folgendes erfolgreich geschrieben:

<%@ Page 
	Language="C#" 
	MasterPageFile="~/StandardMaster.master" 
	Inherits="Pages_ConfigurationAssetList" 
	CodeFile="ConfigurationAssetList.aspx.cs" 
	CodeFileBaseClass="PageBase" 
	Title='Anlagenliste' 
	TitleImageFileName="CheckBook.png" %>

Wobei „PageBase“ die Basisklasse war und „TitleImageFileName“ mein neu hinzugefügtes Attribut.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.