all groups > asp.net building controls > december 2006 >
You're in the

asp.net building controls

group:

<% =expression%> not evaluated in custom control attributes


<% =expression%> not evaluated in custom control attributes James Hawkins
12/13/2006 3:38:39 PM
asp.net building controls: Let's say my ASPX page codebehind has a method S() which returns a
string value (of let's say a constant "string").

If I do this (hope all these special chars make it through) on an ASPX
page:
<a href='<%=S()%>'>Link</a>

this renders as one might expect; i.e. S() is evaluated and the html
rendered will be something like:
<a href='string'>Link</a>

With a server control:
<asp:HyperLink
runat="server"
NavigateUrl='<%=S()%>'>
Link
</asp:HyperLink>

I instead get:
<a href='<%=S()%>'>Link</a>

i.e. the expression is not evaluated. This appears to be the same for
most or perhaps all attributes of most or perhaps all server controls.

I'm creating a custom control (derived from WebControl) where I would
prefer to have these expressions evaluated in attributes (or at least
some of them) before they are passed to the control. I'd imagine that
this is probably done by specifying an attribute for the control
property or perhaps for the control as a whole, as the evaluation
needs to occur prior to the attribute value being passed to the
control, which has no context for evaluation at that point.

The control in question is not data bound.

Is this possible? Is it perhaps possible with a different syntactical
construction; e.g. perhaps with <%# %>?

Re: <% =expression%> not evaluated in custom control attributes James Hawkins
12/13/2006 3:55:56 PM
On Wed, 13 Dec 2006 15:38:39 GMT, James Hawkins <not@real.address>
[quoted text, click to view]

I noticed that I can use <%#S()%>, but only if I call DataBind() on
the control. As this is a custom control that I don't want to have to
explicitly DataBind(), I am currently doing a 'self-bind' by calling
DataBind() in the control's OnInit(). Is this an acceptable way of
doing things?

Re: <% =expression%> not evaluated in custom control attributes Axel Dahmen
12/16/2006 12:00:00 AM
Hi James,

instead of using this (obsolete) ASP expression syntax you should assign =
the NavigateUrl property in your code-behind file:

void Page_Load(...)
{
myHyperLink.NavigateUrl =3D S();
}

HTH,
Axel Dahmen
www.dashop.de


----------------------
"James Hawkins" <not@real.address> schrieb im Newsbeitrag =
news:et50o2d5v667ds9t58ap1f8ouqfec4n8cp@4ax.com...
[quoted text, click to view]
Re: <% =expression%> not evaluated in custom control attributes Rick Strahl [MVP]
12/25/2006 2:44:53 PM
<%# %> expressions require databinding and can only be used inside of
templates or inside of a full attribute value of a control. But the
databinding is required as these expressions generate databinding event
code.

<%= %> doesn't work inside of server control attributes as you found out
because the server control parsing will interpret the expression as a
string. Outside of quotes the the quotes but inside of the server expression
they are not allowed at all.

As Axel points out the better way to do this is to use codebehind to set the
value and while I don't agree about the 'obsolete' comment he makes, in this
case that may be the only way that you can get this to work...

+++ Rick ---


[quoted text, click to view]
AddThis Social Bookmark Button