asp.net用户控件,让htmlAnchor解析为href =“#”
如何让服务器控件HTMLAnchor拥有href =“#”。 它不断解析控制路径的“#”。
resolves to:
我似乎无法得到谷歌搜索给我我想要的结果所以我想我会问这里。
编辑:语法。
删除runat服务器不是一个选项。 它在后端被操纵,这只是一个简化。
我有同样的问题,这是我如何解决它:
原始代码
用户控制:
...
代码背后:
foo.Attributes.Add("href", "#");
输出:
...
更新的代码
用户控制:
...
代码背后:
foo.Attributes.Add("href", "#");
输出:
...
在使用PageParser.GetCompiledPageInstance()呈现页面或重写url时,我遇到了类似的问题。 由于某种原因,HtmlAnchor总是错误地解决(类似于你上面的)。
结束只使用HtmlGenericControl,因为无论如何你都在服务器端操作,这可能是你的可能。
HtmlGenericControl anchor = new HtmlGenericControl("a"); anchor.Attributes.Add("href", "#");
Brendan Kowitz解决方案可行,但由于该控制的运行方式,我无法实现它。 我最终不得不按照后面代码中的以下代码来破解它:
lnk.Attributes.Add("href",Page.Request.Url.ToString() + "#");
lnk是HtmlAnchor。
首先出现这个问题的原因是控件与页面不在同一目录中,而.Net则“智能地”为您解决问题。 以上将是有效的,但如果有人有更好的解决方案,我会全力以赴。
最初我把它作为评论,但是根据要求我将其添加为答案,因为没有其他人解释为什么原始行为正在发生或如何直接阻止它。
URL重写是由Control类上的ResolveURL方法引起的。 我在Reflector中查看它,发现如果AppRelativeTemplateSourceDirectory非空,它将尝试重写它认为是相对URL的任何内容。
简单的解决方法是在Page对象上将此变量设置为某个全局级别的空字符串(或者至少在Render之前),尽管如果控制结构的某些其他部分要求为空,这可能是一个问题。
我想真正的解决办法是让微软让UrlPath.IsRelativeUrl()变得更聪明。
我碰到了同样的事情。 如果你在页面加载时设置它,它将工作:
AppRelativeTemplateSourceDirectory = "";
尝试删除“runat”属性并包装要链接的内容;
Your Link Text/Image Here
我的工作也很好…我有一个用户控件AnchorTag.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AnchorTag.ascx.cs" Inherits="JavascriptScroll.AnchorTag" %> Anchor Tag
我把它包括在:
<%@ Register src="AnchorTag.ascx" tagname="AnchorTag" tagprefix="uc1" %>
。 。 。
。 。
它按预期呈现:
Anchor Tag
如果我正在做一些不期望的事情,请纠正我…
编辑:包括嵌套路径
我的测试项目为我呈现了正确的链接:
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" %>
控制:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl2.ascx.cs" Inherits="WebUserControl2" %> " runat="server" >here
控制代码 – 背后:
protected string URLHelper(string s) { return Control.ResolveUrl(s); }
那这个呢?
HtmlAnchor errorLink = new HtmlAnchor(); errorLink.InnerText = this.Message; errorLink.HRef = errorLink.ResolveClientUrl("#" + this.FormControlId); errorLink.Attributes["rel"] = "form_help";
适合我,但我在类库中使用服务器控件而不是用户控件。 我认为它也适用于用户控件。