asp.netasp.net-webcontrol

using <%= %> or <%# %> with runat=server in ASP.NET


I have a web control that looks like this

public class Foo : WebControl
{
  [Bindable(true)]
  [Category("Default")]
  [DefaultValue("")]
  [Localizable(true)]
  public string Bar { get; set; }

  protected override void Render(HtmlTextWriter output)
  {
    output.WriteLine(Bar);
  }
}

I want to put this webcontrol in my aspx page like so:

<cc1:Foo Bar="<%= Fa.La.La %>/otherstuff" runat="server" />

(obviously this code is simplified to show the problem)

In my Render method the variable Fa.La.La is not evaluated. It's coming in as the raw text "<%= Fa.La.La %>" How do I evaluate it?

I'm not particular how the variables are passed in. If the variables can be evaluated if they are passed in as <%# ... %>, that works fine. The point is I have some server-side variables I want evaluated before/while my Render() method is called.

The only thing I can think of is to use a regex to grab the contents of <%= ... %> and use reflection or something, but there has to be a more elegant way to do this.

This question is pretty similar to using server variables in a href <%= xx %> with runat=server, but it's not exactly the same since none of the answers there were useful.


Solution

  • You should have to use binding expression <%# expr %>.

    <cc1:Foo Bar='<%# String.Concat(Fa.La.La,"/otherstuff")%>' runat="server" /> 
    

    and call DataBind() method in code-behind.

    public void page_load()
    {
      DataBind();
    }