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".
På 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>
<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);
}
}
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 %>
<%$ Code: "Hello World, " + CurrentUserName %>
<%$ Code: CurrentUserName.ToUpper() %>
<%$ Code: "Page compiled as: " + this.GetType().AssemblyQualifiedName %>
Mer läsning finns hos Fredrik Normén
Tags