(0) exportieren Drucken
Alle erweitern

ExpressionBuilder-Klasse

Aktualisiert: November 2007

Wertet während der Seitenanalyse Ausdrücke aus.

Namespace:  System.Web.Compilation
Assembly:  System.Web (in System.Web.dll)

[AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public abstract class ExpressionBuilder
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal) */
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal) */
public abstract class ExpressionBuilder
public abstract class ExpressionBuilder

Die ExpressionBuilder-Klasse ist die Basisklasse für Ausdrucks-Generatoren (z. B. die AppSettingsExpressionBuilder-Klasse), die während der Seitenanalyse Codeausdrücke erstellen.

Ausdrucks-Generatoren analysieren deklarative Ausdrücke und erstellen Code, um an eine Steuerelementeigenschaft gebundene Werte abzurufen. In Szenarios wertet ein Ausdrucks-Generator, der ein Feature unterstützt, in dem keine Kompilierung erfolgt, den Ausdruck zur Laufzeit aus.

Wenn der Seitenparser einen Ausdruck entdeckt, der durch die Zeichenfolge <%$ %> begrenzt ist, erstellt er basierend auf dem Präfix in der Zeichenfolge einen Ausdrucks-Generator für den Ausdruck. Das Präfix ist der Teil der Zeichenfolge, der sich links vom Doppelpunkt (:) befindet. Wenn der Parser z. B. die Zeichenfolge <%$ ConnectionStrings:MessageDB %> entdeckt, wird ein ConnectionStringsExpressionBuilder-Objekt erstellt. Präfixe werden in der Datei Web.config im Abschnitt ExpressionBuilders Ausdrucks-Generatoren zugeordnet.

Die rechte Seite des deklarativen Ausdrucks wird zur Auswertung an den Ausdrucks-Generator übergeben. Überschreiben Sie die GetCodeExpression-Methode, um Code zu generieren, der mit der Seite kompiliert wird.

Wenn der benutzerdefinierte Ausdrucks-Generator auf nicht kompilierten Seiten aktiv sein soll, müssen Sie die EvaluateExpression-Methode überschreiben, sodass sie ein Objekt zurückgibt, das die Ergebnisse des Ausdrucks darstellt. Sie müssen auch die SupportsEvaluate-Eigenschaft überschreiben, um anzugeben, dass der benutzerdefinierte Ausdrucks-Generator Seiten ohne Kompilierung unterstützt.

Sie können eine Reihe von Eigenschaften und Methoden für das Auswählen und Auswerten eines Ausdrucks definieren, der zur Entwurfszeit einer Steuerelementeigenschaft zugeordnet wird, indem Sie einen Ausdrucks-Editor implementieren. Der Editor wird im Ausdrucks-Generator durch Metadaten auf Klassenebene markiert. Weitere Informationen finden Sie unter ExpressionEditor.

Hinweise zur Vererbung:

Wenn Sie von dieser ExpressionBuilder-Klasse erben, müssen Sie die GetCodeExpression-Methode überschreiben.

In den folgenden Codebeispielen wird veranschaulicht, wie ein benutzerdefinierter Ausdrucks-Generator erstellt wird, indem die abstrakte ExpressionBuilder-Klasse implementiert wird. Diese Implementierung von ExpressionBuilder gibt eine ausgewertete Anweisung zurück, die an den Ausdruck übergeben wird. Um dieses Beispiel auszuführen, müssen Sie zuerst den benutzerdefinierten Ausdrucks-Generator in der Datei Web.config registrieren. Im ersten Codebeispiel wird veranschaulicht, wie der benutzerdefinierte Ausdrucks-Generator in der Datei Web.config registriert wird.

<configuration>
    <system.web>
       <compilation>
          <expressionBuilders>
              <add expressionPrefix="MyCustomExpression"
               type="MyCustomExpressionBuilder"/>
          </expressionBuilders>
       </compilation>
    </system.web>
</configuration>

Im zweiten Codebeispiel wird veranschaulicht, wie in einer ASPX-Datei auf den Ausdruck verwiesen wird.

<asp:Label ID="Label1" runat="server" 
Text="<%$ MyCustomExpression:Hello, world! %>" />

Im dritten Codebeispiel wird veranschaulicht, wie ein benutzerdefinierter Ausdrucks-Generator entwickelt wird, indem er von ExpressionBuilder abgeleitet wird. Um dieses Codebeispiel auszuführen, müssen Sie die Klasse im Ordner App_Code platzieren.

using System;
using System.CodeDom;
using System.Web.UI;
using System.ComponentModel;
using System.Web.Compilation;
using System.Web.UI.Design;

// Apply ExpressionEditorAttributes to allow the 
// expression to appear in the designer.
[ExpressionPrefix("MyCustomExpression")]
[ExpressionEditor("MyCustomExpressionEditor")]
public class MyExpressionBuilder : ExpressionBuilder
{
    // Create a method that will return the result 
    // set for the expression argument.
    public static object GetEvalData(string expression, Type target, string entry)
    {
        return expression;
    }

    public override object EvaluateExpression(object target, BoundPropertyEntry entry, 
	object parsedData, ExpressionBuilderContext context)
    {
        return GetEvalData(entry.Expression, target.GetType(), entry.Name);
    }

    public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, 
	object parsedData, ExpressionBuilderContext context)
    {
        Type type1 = entry.DeclaringType;
        PropertyDescriptor descriptor1 = TypeDescriptor.GetProperties(type1)[entry.PropertyInfo.Name];
        CodeExpression[] expressionArray1 = new CodeExpression[3];
        expressionArray1[0] = new CodePrimitiveExpression(entry.Expression.Trim());
        expressionArray1[1] = new CodeTypeOfExpression(type1);
        expressionArray1[2] = new CodePrimitiveExpression(entry.Name);
        return new CodeCastExpression(descriptor1.PropertyType, new CodeMethodInvokeExpression(new 
	   CodeTypeReferenceExpression(base.GetType()), "GetEvalData", expressionArray1));
    }

    public override bool SupportsEvaluate
    {
        get { return true; }
    }
}


Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0, 2.0

Community-Beiträge

HINZUFÜGEN
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft