2009-07-21 20 views
8

Asp.net kullanıcı denetimi yazıyorum. Bir özelliğe sahiptir, FurtherReadingPage ve buna bağlı iki denetim vardır: ObjectDataSource ve Repeater. Repeater İçinde FurtherReadingPage + "?id=" + Eval("Id") gibi bir şeye ayarlanmış bir href özelliği olan bir köprü görüntülemek istiyorum. Bunu sayfanın işaretlemesi içinde nasıl yapacağımı bilmiyorum. Tek başına <% Eval("Id") %> veya <% Response.Write(FurtherReadingPage + "?id=") %> kullanabilirim ama nasıl karıştırılacağını bilmiyorum.Asp.net sayfasında <% ... %> etiketleri içinde C# kodu nasıl kullanılır?

cevap

3

Böyle yapabilirsin -

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

bu (bağlantı olarak örnek) deneyin: <a href='<%=FurtherReadingPage %>?id=<%# Eval("Id") %>'>My link</a>

+0

Bu karışımları <% = ve sorun yaratacak <% # çoğu durum. <% = Repeater içinde çalışmaz ve DataBind() çağrılmadıkça <% # çalışmaz. – Keith

+0

@Keith: Yanılıyorsunuz. Tekrar kontrol etmek için bir tekrarlayıcıda <%= "Test" %>'u denedim ve tamam çalışıyor. <% # yalnızca, Databind() ile çalışır. – Sergio

+0

Üzgünüz, evet, <% = yukarıdaki herhangi bir koleksiyon stili denetimi içermeyen kontrol hiyerarşisine bağlı olarak tekrarlayıcılarda çalışabilir. Temel olarak <% = FurtherReadingPage%> bazen tekrarlayıcıda çalışır, <% # FurtherReadingPage%> ise her zaman olacaktır. – Keith

3

bu deneyin:

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

Farklı etiketlerin bir çift var:

<%, iç kodu şu kodu çalıştırır:

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

içindeki kod dışarı yazıyor:

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

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

sayfada görüntülendiğinde zaman Asp.net <head runat="server"> sen olacak normal bunları kullanırsanız Bunların her ikisi, örneğin normal akışını parçalamak sorun çıkar.

<%# veri bağlama:

<%# Eval("id") %> 

Bu mesela, Asp.net WebForms bir koleksiyon (yerine, birlikte <%= kullanabilirsiniz değişmez kontroller) olarak işlemek denetimler için bağlamalarını belirlemenizi sağlar:

özel durumda için
<!-- 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(); 
    } 
%> 

sen ya:

  • ile repeater.DataBind();

veya

  • kullan foreach döngüsü (<% foreach(... %>) bir tekrarlayıcı ve <%# Eval(...) %> kullanım <%= ... %>
İlgili konular