How to access code-behind variables from the controls that have “runat=server”?

Let’s say you have the control below in your ASP.NET page. This is a Telerik control which shows a fancy tile with a text and image.

<telerik:RadImageTile runat="server" ImageHeight="150px" ImageWidth="150px" ImageUrl="http://www.mysite.com/tile.png" Name="Test Tile" NavigateUrl="http://www.microsoft.com" Target="_blank">

You want to embed ImageUrl dynamically instead of hardcoding it as it’s above. You may want to use this format but it doesn’t work since there is runat="server" tag in the control.

<%= testVariable %>

In order to reference code-behind variables from your controls that have runat="server" tag, follow the steps below.

1- Create CodeExpressionBuilder class in your Solution root

using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.Compilation;
using System.CodeDom;

namespace Namespace_Name
{
    [ExpressionPrefix("Code")]
    public class CodeExpressionBuilder : ExpressionBuilder
    {
        public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
        {
            return new CodeSnippetExpression(entry.Expression);
        }
    }
}

2- Add expressionBuilders block into web.config

<compilation debug="true" targetFramework="4.5.2">
     <expressionBuilders>
          <add expressionPrefix="Code" type="iFin_Production.CodeExpressionBuilder"/>
     </expressionBuilders>
</compilation>

3- Refer your variable in ASP.NET page as it’s shown below

<telerik:RadImageTile runat="server" ImageHeight="150px" ImageWidth="150px" ImageUrl="<%$ Code: testVariable %>" Name="Test Tile" NavigateUrl="http://www.microsoft.com" Target="_blank">

Credits:

Leave a Reply