Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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/9/security/4.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="#&引用;变成href=";子文件夹/#quot;?_Asp.net - Fatal编程技术网

Asp.net NavigateUrl="#&引用;变成href=";子文件夹/#quot;?

Asp.net NavigateUrl="#&引用;变成href=";子文件夹/#quot;?,asp.net,Asp.net,这并不完全是费马的最后一个定理,但它总是像一张未付的大学电话费一样让我恼火。有时我想创建一个不会导致回发的超链接,因此我希望目标url为#。当标记恰好来自子文件夹中的UserControl时 / |- Home.aspx (uses UC.ascx) |- Sub |- UC.ascx URL将使用相对路径重写,例如 <asp:HyperLink runat="server" NavigateUrl="#" >Click Me!</asp:HyperLink>

这并不完全是费马的最后一个定理,但它总是像一张未付的大学电话费一样让我恼火。有时我想创建一个不会导致回发的
超链接,因此我希望目标url为#。当标记恰好来自子文件夹中的UserControl时

/
|- Home.aspx (uses UC.ascx)
|- Sub
   |- UC.ascx
URL将使用相对路径重写,例如

<asp:HyperLink runat="server" NavigateUrl="#" >Click Me!</asp:HyperLink>

不幸的是,这是错误的。显然,我可以通过不使用服务器控件来解决这个问题,但这似乎很愚蠢。这能避免吗

这里的要点是,我将使用jQuery或代码隐藏添加一个单击事件,我不希望它导致回发,但出于CSS原因,我希望它是一个超链接。

简易方法:

 <asp:HyperLink ID="HyperLink1" 
                navigateUrl="#" 
                onclick="javascript:return false;"                   
                runat="server">HyperLink</asp:HyperLink>

您可以为服务器端元素设置属性

<asp:HyperLink ID="HyperLink1" runat="server" Text="Click me"
    href="#" style="color: red;" />

实际上,将控件添加到页面而不使用href/NavigateUrl属性提供了最大的灵活性

<asp:HyperLink ID="HyperLink1" runat="server"/>

尽管如此,布鲁诺和卡斯帕的答案在某些情况下仍然有效。例如,假设您的超链接控件嵌套在中继器中。如果您希望有条件地将href属性设置为实际URL或“#”,则这些方法将不起作用。“#”将每次呈现。

您可以使用事件对象取消导航。函数(e){e.preventDefault();}。如果要使用jQuery绑定某个事件,那么使用服务器控件是没有意义的。在这种情况下,服务器上的逻辑控制链接的可见性以及javascript事件的特定代码。当然,有一些方法可以解决这个问题(例如,我只是将其包装在一个占位符中,并使用标记在标记中定义单击事件),但我必须做这些事情之一(使用javascript阻止导航,和/或不使用服务器控件)似乎很愚蠢做一些基本的事情,如果服务器控件工作正常,可以做得更优雅。第二个选项有效。第一个不起作用。他最后说的不太适合他的情况。#2是答案。。。回想起来,这似乎很明显!谢谢请注意,
NavigateUrl=“./#”
仍然呈现为
href=“SubFolder/#”
编辑,第一个答案毫无意义,只是实验的一小部分,很抱歉给您带来不便。您是说小写的“NavigateUrl”在不重写url的情况下呈现为“href”吗?为什么不直接显示为“navigateUrl”?我很惊讶#2可以工作,因为href不是服务器上的属性。我想ASP.NET会自动将它无法识别的属性放在发出的HTML上的web控件上。
$("a.nopostback").bind('click', function () {
     return false;
})
<asp:HyperLink ID="HyperLink1" runat="server" Text="Click me"
    href="#" style="color: red;" />
HyperLink1.Attributes
<asp:HyperLink ID="HyperLink1" runat="server"/>
HyperLink1.Attributes.Add("href","{your-value-here}");