Asp.net 我可以在超链接上显式指定NavigateUrl吗?
Asp.Net非常聪明,它试图解析超链接的Asp.net 我可以在超链接上显式指定NavigateUrl吗?,asp.net,.net,hyperlink,Asp.net,.net,Hyperlink,Asp.Net非常聪明,它试图解析超链接的NavigateUrl,该超链接相对于它所在的控件,或者相对于应用程序根目录(如果您将~/放在开始位置) 但我有一种情况,我想显式地将url设置为相对路径,而我根本不想让它“帮助”我 Hyperlink的导航url和HtmlAnchor的href属性都表现出这种行为。 可以停止这种行为吗?或者我必须手动生成标记而不使用控件吗 例如 我在文件夹[approt]/foo/bar中有一个用户控件,其中包含asp:Hyperlinks 我正在使用页面[appro
NavigateUrl
,该超链接相对于它所在的控件,或者相对于应用程序根目录(如果您将~/放在开始位置)
但我有一种情况,我想显式地将url设置为相对路径,而我根本不想让它“帮助”我
Hyperlink的导航url和HtmlAnchor的href属性都表现出这种行为。
可以停止这种行为吗?或者我必须手动生成标记而不使用控件吗
例如
我在文件夹[approt]/foo/bar
中有一个用户控件,其中包含asp:Hyperlinks
我正在使用页面
[approt]/myPage.aspx
中的控件。
我希望在呈现超链接时,超链接的href
属性与'aduck.gif'
完全相同
但是如果我写下
<asp:Hyperlink runat="server" NavigateUrl="donkey.gif" />
然后呈现的href将是'foo/bar/aduck.gif'
出于复杂的原因,我不想在这里讨论,使用“~/aduck.gif”不是一个选项。
另外,我不能使用
ResolveUrl(stringURL)
来生成绝对url。您不能简单地使用HTML锚(没有runat=“server”
属性)吗?例如:
自定义超链接控件:
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属性,如下所示:
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);
}
...
}
<asp:Hyperlink runat="server" href="donkey.gif" />
我还没有弄清楚您的问题,您能告诉我们,您在哪里试图明确地指定NavigateURL?您希望NavigateURL=“驴.gif”
如何解析为images/驴.gif
?“图像从何而来?”丹·迪普洛——我的错。问题已被编辑/更正LOL在使用引号时:“救命”我,这太有帮助了!:看起来这是我必须走的路。这是令人沮丧的,因为我在代码中设置了一些属性(如目标、工具提示等),这使得生成整个标记非常繁重。+1。我真的很喜欢这样简单的事情解决问题!谢谢-我在我的代码中设置了NavigateUrl属性,但它不起作用。设置href属性有效。在.Net 4上使用该属性有两件事A)我无法使其工作,因为超链接仍然会向链接添加相对路径,即使标记将href显示为“google.com”或其他内容,b)我收到了myHyperLink.Attributes(“href”)
的编译器错误。编译器错误通过使用myHyperLink.Attributes[“href”]
解决。我不会编辑这篇文章,因为似乎有些人已经用这种方法取得了成功。帮助我。它与.Net 4一起工作-只需确保您没有在html中同时使用href和NavigateUrl属性。用一个或另一个。
<asp:Hyperlink runat="server" href="donkey.gif" />