How do I make my ASP.NET server control take an embedded code block as a property value?

I have a custom server control with a property of Title. When using the control, I’d like to set the value of the title in the aspx page like so:

<cc1:customControl runat="server" Title='<%= PagePropertyValue%>' >
more content

When I do this, however, I am getting the exact String <%= PagePropertyValue%> being displayed rather than the Property Value that I would like to see.

So after trying the databinding expression (as suggested below). I don’t get the string literal that looked bad but I don’t get anything else either.

<cc1:customControl runat="server" Title='<%# PagePropertyValue%>' >
more content

What do I need to do to my custom control to take this sort of value? Or is there something I need to do to the page.

Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

Solution 1

You cant. <%= %> will write the string directly to the response-stream, which happens after the server control is constructed. See this post for an explanation.

So its either codebehind, or <%# + databinding as Zachary suggests.

Solution 2

As a followup to my own question, I have discovered that what I really wanted was to use ASP.NET Expressions using the <%$ syntax, since what I wanted to do was put in localized content.

This can be done with apparently no extra handling on the server control side.

<cc1:customControl runat="server" Title='<%$ Resouces: ResourceFile, ContentKey %>' >
more content and controls

This works just fine.

Solution 3

Try using databinding syntax:
<%# PagePropertyValue %>

Solution 4

For the bind property value to work correctly as suggested, you will have this in the aspx or ascx file :

<cc1:customControl runat="server" Title='<%# PagePropertyValue %>' >
more content

You will then need to actually bind data in your page wich you have to add this in you code behind file (code in C#)

protected void Page_Load(object sender, EventArgs e)

That way it will bind the data in your ascx or aspx file.

Solution 5

Note that this is specific to control attributes. When using the <%= syntax outside control attributes meaning anywhere else in the page the syntax works as expected. So this


would call the correct method and inject the result of the call in the page.

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply