Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 我可以在超链接上显式指定NavigateUrl吗?_Asp.net_.net_Hyperlink - Fatal编程技术网

Asp.net 我可以在超链接上显式指定NavigateUrl吗?

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

Asp.Net非常聪明,它试图解析超链接的
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" />