asp.net用户控件,获得的HtmlAnchor决心HREF =“#”(asp.net user

2019-07-19 23:09发布

你如何获得一个服务器控件的HtmlAnchor有HREF =“#”。 它使解决“#”来控制路径。

<a href="#" runat="server" />
resolves to: <a href="../ControlPath/#">

我似乎无法获得谷歌搜索给我,我想这样我想我在这里问的结果。

编辑:语法。

卸下RUNAT服务器是不是一种选择。 它在后台操纵的,这只是一个简化。

Answer 1:

我有同样的问题,这里是我怎么能解决这个问题:

原代码

用户控制:

<a id="foo" runat="server">...</a>

后面的代码:

foo.Attributes.Add("href", "#");

输出:

<a id="..." href="../Shared/Controls/#">...</a>

更新代码

用户控制:

<asp:HyperLink id="foo" runat="server">...</asp:HyperLink>

后面的代码:

foo.Attributes.Add("href", "#");

输出:

<a id="..." href="#">...</a>


Answer 2:

渲染与PageParser.GetCompiledPageInstance()或当URL被改写的页面时,我也有类似的问题。 出于某种原因,总的HtmlAnchor解决错误(类似于您有以上)。

结束了只使用一个HtmlGenericControl,因为你操纵它的服务器端反正这可能是你的可能性。

HtmlGenericControl anchor = new HtmlGenericControl("a");
anchor.Attributes.Add("href", "#");


Answer 3:

布伦丹Kowitz解决方案将工作,但是我没能实现它由于这种控制是操作方式。 我最后不得不破解它按在后面的代码下面的代码:

lnk.Attributes.Add("href",Page.Request.Url.ToString() + "#");

凡LNK是的HtmlAnchor。

之所以这个问题摆在首位的是控制不在同一目录页和.Net那张关于“智能”修复你的问题你。 上面的代码将工作,但如果任何人有一个更好的解决方案我所有的耳朵。



Answer 4:

本来我有这个作为一个评论,但根据要求,我将其添加为自答案没有人解释为什么原来的行为正在发生或如何直接阻止它。

的URL重写是通过在控制类中的方法RESOLVEURL引起的。 我看着它在反射器,发现它会尝试重写任何它认为是一个相对URL,如果AppRelativeTemplateSourceDirectory非空。

简单的解决方法是Page对象这一变量在一些全球级别(或至少之前渲染)设置为空字符串,但如果你的控制结构的一些其他位需要它是空的,这可能是一个问题。

我想一个真正的解决将是获得微软做出UrlPath.IsRelativeUrl()更聪明。



Answer 5:

我遇到了同样的事情。 如果设置此页面加载,它会工作:

AppRelativeTemplateSourceDirectory = "";


Answer 6:

尝试删除“RUNAT”属性和包装要链接的东西;

<a href="#" >Your Link Text/Image Here</a>


Answer 7:

这应该工作。

<a href="javascript:void(0)">text</a>

这应该工作。

<a href="~/#">text</a>


Answer 8:

太矿工作正常...我有一个用户控件AnchorTag.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AnchorTag.ascx.cs" Inherits="JavascriptScroll.AnchorTag" %>
<a id="A1" href="#" runat="server" >Anchor Tag</a>

而我把它作为:

<%@ Register src="AnchorTag.ascx" tagname="AnchorTag" tagprefix="uc1" %>

。 。 。

<uc1:AnchorTag ID="AnchorTag1" runat="server" />

。 。

它呈现为预期:

 <a href="#" id="AnchorTag1_A1">Anchor Tag</a>

请纠正我,如果我做得预计不...



Answer 9:

编辑:包含嵌套路径

我的测试项目呈现正确的链接对我来说:

 http://localhost:2279/WebSite1/Default.aspx#

ASPX:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register src="control/WebUserControl2.ascx" tagname="WebUserControl2" tagprefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">    
          <uc1:WebUserControl2 ID="WebUserControl21" runat="server" />
    </form>
</body>
</html>

控制:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl2.ascx.cs" Inherits="WebUserControl2" %>
<a id="A1" href="<%# URLHelper("~/#") %>" runat="server" >here</a>

器代码背后:

protected string URLHelper(string s)
{
    return Control.ResolveUrl(s);
}


Answer 10:

那这个呢?

HtmlAnchor errorLink = new HtmlAnchor();
errorLink.InnerText = this.Message;
errorLink.HRef = errorLink.ResolveClientUrl("#" + this.FormControlId);
errorLink.Attributes["rel"] = "form_help";

对我的作品,但我用了一个类库服务器控件,而不是用户控件。 我认为它应该为用户控件正常工作。



文章来源: asp.net user control, getting htmlAnchor resolve to href=“#”