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}");