2009-07-21 8 views
8

J'écris un contrôle utilisateur asp.net. Il a une propriété, FurtherReadingPage et deux contrôles liés: ObjectDataSource et un répéteur. À l'intérieur du répéteur, je voudrais afficher un lien hypertexte avec une propriété href définie à quelque chose comme FurtherReadingPage + "?id=" + Eval("Id"). Je ne sais pas comment le faire dans le balisage de la page. Je peux utiliser <% Eval("Id") %> ou <% Response.Write(FurtherReadingPage + "?id=") %> seul mais je ne sais pas comment les mélanger.Comment utiliser le code C# à l'intérieur des balises <% ... %> sur la page asp.net?

Répondre

3

Vous pouvez le faire comme ça -

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

Essayez ceci (par exemple comme lien): <a href='<%=FurtherReadingPage %>?id=<%# Eval("Id") %>'>My link</a>

+0

Ce mix <% = et <% #, ce qui créera des problèmes dans la plupart des circonstances. <% = ne fonctionnera pas dans un répéteur et <% # ne fonctionnera que si DataBind() est appelé. – Keith

+0

@Keith: Vous avez tort. J'ai juste essayé <%= "Test" %> à l'intérieur d'un répéteur pour vérifier et cela fonctionne bien. <% # ne fonctionne qu'avec Databind(), ce qui est le cas. – Sergio

+0

Désolé, oui, <% = peut fonctionner dans les répéteurs, en fonction de la hiérarchie de contrôle ci-dessus ne contenant aucun contrôle de style de collection. Fondamentalement, <% = FurtherReadingPage%> fonctionnera parfois dans un répéteur, alors que <% # FurtherReadingPage%> le fera toujours. – Keith

3

Essayez ceci:

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

Vous avez deux différents tags:

<% exécute le code à l'intérieur:

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

<%= écrit le code à l'intérieur:

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

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

Ces deux briser le flux normal lorsqu'il est rendu sur une page, par exemple, si vous les utilisez dans une <head runat="server"> normale Asp.net vous aurez avoir des problèmes

<%# databinding:

<%# Eval("id") %> 

Cela vous permet de spécifier les liaisons pour les contrôles qui rendent WebForms Asp.net comme une collection (plutôt que les contrôles littérales que vous pouvez utiliser avec <%=), par exemple:

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

Pour votre cas vous soit:

  • Utilisez un répéteur et <%# Eval(...) %> avec repeater.DataBind();

ou

  • Utilisez une boucle foreach (<% foreach(... %>) avec <%= ... %>
Questions connexes