2011-06-07 18 views
9

Asp.Net çok akıllıca ve başlangıçta ~/koyarsanız, uygulama köprüsüne göre veya göreli olarak bir Köprünün NavigateUrl çözümlemeye çalışır.Köprüde NavigateUrl'yi açıkça belirtebilir miyim?

Ancak URL'yi açıkça göreceli bir yola ayarlamak istediğim bir durum var ve hiç bir şekilde 'yardım etme' istemiyorum.

Köprünün gezinme URL'si ve HtmlAnchor'un href özelliği bu davranışı sergiler. Bu davranışı durdurmak mümkün mü, yoksa işaretlemeyi el ile oluşturmalı ve bir kontrol kullanmam gerekecek mi?

örn. asp:Hyperlinks içeren [appRoot]/foo/bar klasöründe kullanıcı denetimi var.
Bu denetimi kullanıyorum [appRoot]/myPage.aspx. Köprülerin 'donkey.gif' tam olarak eşit olması durumunda, href özelliklerinin istiyorum.

Ama aşağıdakileri

<asp:Hyperlink runat="server" NavigateUrl="donkey.gif" /> 

yazarsanız sonra render href 'foo/bar/donkey.gif' olacaktır. Buraya girmemi tercih etmemin karmaşık nedenleri için "~/donkey.gif" seçeneğini kullanmak bir seçenek değildir. Ayrıca, mutlak URL'ler oluşturmak için ResolveUrl(string url) kullanamıyorum.

+0

, sen nereye NavigateURL Explcitly belirtmek için çalışıyoruz, bize gösterebilir misin? –

+0

Nasıl '' images/donkey.gif''de çözülecek 'NavigateUrl =" donkey.gif "' den nasılsınız? Görüntüler nereden geliyor? –

+0

@Dan Diplo - Benim hatam. Soru –

cevap

4

Sadece bir HTML bağlayıcı kullanamazsınız (runat="server" özniteliği olmadan)? Ör:

<a href="relative.htm">link text</a> 

Güncelleme: Eğer HyperLink denetim işlevlerini kaybetmeye istemiyorsanız, siz (bu NavigateURL çözülene nerede) HyperLink türeyen bir denetim oluşturmak ve AddAttributesToRender() yöntemini geçersiz olabilir .

protected override void AddAttributesToRender(HtmlTextWriter writer) 
{ 
    ... 
    string navigateUrl = this.NavigateUrl; 
    if (navigateUrl.Length > 0 && base.IsEnabled) 
    { 
     string str = base.ResolveClientUrl(navigateUrl); 
     writer.AddAttribute(HtmlTextWriterAttribute.Href, str); 
    } 
    ... 
} 

Özel Köprü denetimini: NavigateURL özelliği kullanmak yerine köprü:

public class MyHyperLink : HyperLink 
{ 
    protected override void AddAttributesToRender(HtmlTextWriter writer) 
    { 
    if ((base.Enabled && !base.IsEnabled) && base.SupportsDisabledAttribute) 
    { 
     writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "disabled"); 
    } 
    base.AddAttributesToRender(writer); 
    if (this.NavigateUrl.Length > 0 && base.IsEnabled) 
    { 
     writer.AddAttribute(HtmlTextWriterAttribute.Href, this.NavigateUrl); 
    } 
    if (this.Target.Length > 0) 
    { 
     writer.AddAttribute(HtmlTextWriterAttribute.Target, this.Target); 
    } 
    } 
} 
+0

Bu, gitmem gereken yol gibi görünüyor. Bu sinir bozucu çünkü ben genel markup zahmetli üreten kılan bir kaç özellik (örneğin, Target, Tooltip gibi) koyar. –

12

Daha basit bir çözüm asp href niteliğini ayarlamak olacaktır

HyperLink.AddAttributesToRender()

şöyle
hyperlink1.Attributes("href") = "exactpath.gif" 

hyperlink1.Attributes("href") = ResolveUrl("~/dir/page.aspx") 

.NET4'ten itibaren, yalnızca href özniteliğini ayarlayabilirsiniz E doğrudan böyle: Ben açıkça sorunuzu yok

<asp:Hyperlink runat="server" href="donkey.gif" /> 
+2

+1. Gerçekten çok basit bir şey olduğunda sorunu çözerim! –

+0

Teşekkürler. İşaretlemede 'href' ayarlanması da işe yarıyor. – Corgalore

+0

Bunun için teşekkürler - Benim kılavuzumda NavigateUrl özelliğini ayarlıyordum ve işe yaramadı. Href Attribute ayarlandı. – RoastBeast

İlgili konular