2009-07-21 8 views
8

Estoy escribiendo un control de usuario asp.net. Tiene una propiedad, FurtherReadingPage, y dos controles vinculados a ella: ObjectDataSource y un repetidor. Dentro del repetidor me gustaría mostrar un hipervínculo con una propiedad href establecida en algo como FurtherReadingPage + "?id=" + Eval("Id"). No sé cómo hacerlo dentro del marcado de la página. Puedo usar <% Eval("Id") %> o <% Response.Write(FurtherReadingPage + "?id=") %> solo, pero no sé cómo mezclarlos.Cómo usar el código C# dentro de las etiquetas <% ... %> en la página asp.net?

Respuesta

3

Usted puede hacerlo de esta manera -

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

Prueba esto (ejemplo, como link): <a href='<%=FurtherReadingPage %>?id=<%# Eval("Id") %>'>My link</a>

+0

Esto mezcla <% = y <% #, que creará problemas en la mayoría de las circunstancias. <% = no funcionará dentro de un repetidor y <% # no funcionará a menos que se llame a DataBind(). – Keith

+0

@ Keith: Estás equivocado. Acabo de probar <%= "Test" %> dentro de un repetidor para comprobarlo y funciona bien. <% # solo funciona con Databind(), que es el caso. – Sergio

+0

Lo sentimos, sí, <% = puede funcionar en repetidores, dependiendo de la jerarquía de control anterior que no contenga ningún control de estilo de colección. Básicamente <% = FurtherReadingPage%> a veces funcionará en un repetidor, mientras que <% # FurtherReadingPage%> siempre lo hará. – Keith

3

Prueba esto:

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

Usted tiene un par de etiquetas diferentes:

<% ejecuta el código en el interior:

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

<%= escribe el código dentro:

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

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

Ambos romper el flujo normal cuando se representa en una página, por ejemplo, si se utilizan de manera normal Asp.net <head runat="server"> podrás tener problemas

<%# enlace de datos:

<%# Eval("id") %> 

Esto le permite especificar los enlaces para que los controles ASP.NET WebForms hacen como una colección (en lugar de los controles literales que se pueden utilizar con <%=), por ejemplo:

<!-- 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(); 
    } 
%> 

para su caso específico que sea:

  • Utilice un repetidor y <%# Eval(...) %> con repeater.DataBind();

o

  • utilizar un bucle foreach (<% foreach(... %>) con <%= ... %>
Cuestiones relacionadas