11

I'm writing an asp.net user control. It has a property, FurtherReadingPage, and two controls bound to it: ObjectDataSource and a Repeater. Inside the Repeater I would like to display a hyperlink with an href property set to something like FurtherReadingPage + "?id=" + Eval("Id"). I don't know how to do it inside the page's markup. I can use <% Eval("Id") %> or <% Response.Write(FurtherReadingPage + "?id=") %> alone but I don't know how to mix them.

4 Answers 4

25

You have a couple of different tags:

<% executes the code inside:

<% int id = int.Parse(Request["id"]); %> 

<%= writes out the code inside:

<%=id %> <!-- note no ; -->

<!-- this is shorthand for: -->
<% Response.Write(id); %> 

Both of these break up the normal flow when rendered on a page, for instance if you use them in a normal Asp.net <head runat="server"> you'll get problems.

<%# databinding:

<%# Eval("id") %>

This allows you to specify the bindings for controls that Asp.net WebForms render as a collection (rather than the literal controls that you can use <%= with), for instance:

<!-- this could be inside a repeater or another control -->
<asp:Hyperlink runat="server" ID="demo" 
     NavigateUrl="page.aspx?id=<%# Eval("id") %>" />

<%  //without this bind the <%# will be ignored
    void Page_Load( object sender, EventArgs e ) {
        demo.DataBind(); 
        //or
        repeaterWithManyLinks.DataBind(); 
    } 
%>

For your specific case you either:

  • Use a repeater and <%# Eval(...) %> with repeater.DataBind();

or

  • Use a foreach loop (<% foreach(... %>) with <%= ... %>
Sign up to request clarification or add additional context in comments.

Comments

3

You can do it like this -

<asp:Hyperlink runat="Server" ID="hlLink" NavigateUrl='<%# FurtherReadingPage + "?Id=" + DataBinder.Eval(Container.DataItem, "Id")  %>' />

Comments

3

Try this:

<%#String.Format("{0}?id={1}",FurtherReadingPage, Id)%>

Comments

1

Try this (example as link): <a href='<%=FurtherReadingPage %>?id=<%# Eval("Id") %>'>My link</a>

3 Comments

This mixes <%= and <%#, which will create problems in most circumstances. <%= won't work inside a Repeater and <%# won't work unless DataBind() is called.
@Keith: You are wrong. I just tried <%= "Test" %> inside a repeater to double check and it works ok. <%# only works with Databind() which is the case.
Sorry, yes, <%= can work in repeaters, depending on the control hierarchy above not containing any collection style controls. Basically <%= FurtherReadingPage %> will sometimes work in a repeater, while <%# FurtherReadingPage %> always will.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.