Hur man använder ExpressionBuilder

Ibland känns det naturligt att skriva kod enligt följande:

<asp:Label id="lblUserName" runat="server" Text='<%= CurrentUserName %>' />

Men då får man felet: "Server tags cannot contain constructs".

Infinitiesloop finns det en artikel hur man kan använda ExpressionBuilder att komma runt problemet. Då kan man använda liknande uttyck så här:

<asp:Label id="lblUserName" runat="server" Text=<%$ Code: CurrentUserName %> />

För att detta ska bli möjligt måste man först registrera expressionBuildern i Web.Config:

<compilation debug="true">
    <expressionBuilders>
    <add expressionPrefix="Code" type="CodeExpressionBuilder"/> </expressionBuilders>
</compilation>

Sedan skapar man en klass i App_Code som döps till CodeExpressionBuilder.cs:

using System;
using System.CodeDom;
using System.Web.UI;
using System.ComponentModel;
using System.Web.Compilation;
[ExpressionPrefix("Code")]

public class CodeExpressionBuilder : ExpressionBuilder
{
public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
{
return new CodeSnippetExpression(entry.Expression);
}
}

Då kan man sedan använda uttryck som dessa, direkt i ens kontroller. Coolt!

<%$ Code: DateTime.Now.AddDays(1) %>
<%$ Code: "Hello World, " + CurrentUserName %>
<%$ Code: CurrentUserName.ToUpper() %>
<%$ Code: "Page compiled as: " + this.GetType().AssemblyQualifiedName %>

Mer läsning finns hos Fredrik Normén