Asp.net
我可以在超連結上明確指定 NavigateUrl 嗎?
Asp.Net 非常聰明,如果您將 ~/ 放在開頭,它會嘗試解析
NavigateUrl相對於它所在的控制項或相對於應用程序根目錄的超連結。但是我有一種情況,我想明確地將 url 設置為相對路徑,我根本不希望它“幫助”我。
超連結的導航 url 和 HtmlAnchor 的 href 屬性都表現出這種行為。是否可以停止這種行為 - 還是我必須手動生成標記而不使用控制項?
例如 ,我在
[appRoot]/foo/bar包含asp:Hyperlinks.我正在使用頁面中的控制項
[appRoot]/myPage.aspx。我希望href超連結的屬性在呈現時完全等於'donkey.gif'.但是如果我寫以下
<asp:Hyperlink runat="server" NavigateUrl="donkey.gif" />那麼渲染的 href 將是
'foo/bar/donkey.gif'.由於復雜的原因,我不想在這裡討論,使用“~/donkey.gif”不是一個選項。另外,我不能
ResolveUrl(string url)用來生成絕對網址。
您不能簡單地使用 HTML 錨(沒有
runat="server"屬性)嗎?例如:<a href="relative.htm">link text</a>更新:如果您不想失去 HyperLink 控制項的功能,您可以創建一個派生自該方法的控制項
HyperLink並覆蓋該AddAttributesToRender()方法(這是解析 NavigateUrl 的地方)。
HyperLink.AddAttributesToRender()看起來像這樣: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); } ... }自定義超連結控制項:
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); } } }
一個更簡單的解決方案是設置 asp:hyperlink 的 href 屬性,而不是使用 NavigateUrl 屬性:
hyperlink1.Attributes("href") = "exactpath.gif" hyperlink1.Attributes("href") = ResolveUrl("~/dir/page.aspx")從 .NET4 開始,您也可以像這樣直接設置 href 屬性:
<asp:Hyperlink runat="server" href="donkey.gif" />