2009-07-21 11 views
8

Sto scrivendo un controllo utente asp.net. Ha una proprietà, FurtherReadingPage e due controlli ad essa associati: ObjectDataSource e un ripetitore. All'interno del ripetitore mi piacerebbe visualizzare un collegamento ipertestuale con una proprietà href impostata su qualcosa come FurtherReadingPage + "?id=" + Eval("Id"). Non so come farlo all'interno del markup della pagina. Posso usare solo <% Eval("Id") %> o <% Response.Write(FurtherReadingPage + "?id=") %> ma non so come mescolarli.Come utilizzare il codice C# all'interno dei tag <% ... %> nella pagina asp.net?

risposta

3

si può fare in questo modo -

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

Prova questo (ad esempio come link): <a href='<%=FurtherReadingPage %>?id=<%# Eval("Id") %>'>My link</a>

+0

Questo mix <% = e <% #, che creerà problemi a la maggior parte delle circostanze. <% = non funzionerà all'interno di un ripetitore e <% # non funzionerà se non viene chiamato DataBind(). – Keith

+0

@ Keith: Ti sbagli. Ho appena provato <%= "Test" %> all'interno di un ripetitore per ricontrollare e funziona bene. <% # funziona solo con Databind(), che è il caso. – Sergio

+0

Siamo spiacenti, sì, <% = può funzionare nei ripetitori, a seconda della gerarchia di controllo sopra non contenente controlli dello stile di raccolta. Fondamentalmente <% = FurtherReadingPage%> a volte funziona in un ripetitore, mentre <% # FurtherReadingPage%> lo farà sempre. – Keith

3

Prova questo:

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

Hai un paio di diversi tag:

<% esegue il codice all'interno:

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

<%= scrive il codice all'interno:

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

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

Entrambi questi spezzare il flusso normale se fusi in una pagina, ad esempio, se si utilizzano in un normale Asp.net <head runat="server"> Avrete avere problemi

<%# associazione dati:

<%# Eval("id") %> 

Ciò consente di specificare le associazioni per i controlli che ASP.NET WebForms rendono come un insieme (piuttosto che i controlli letterali che è possibile utilizzare <%= con), per esempio:

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

Per il vostro caso specifico si sia:

  • Utilizzare un ripetitore e <%# Eval(...) %> con repeater.DataBind();

o

  • Utilizzare un ciclo foreach (<% foreach(... %>) con <%= ... %>
Problemi correlati