我试图在页面的网址等于<a>
的href而不是改变某些类的时候这样做。
它会在点击链接时更改页面,但它不会更改<li>
的类
这就是我所做的:
HTML:
<div id='settingNev' >
<ul >
<li id="L1" runat="server"><a id="A1" href="../newsFeed/allEr.aspx" runat="server"><span>Er</span></a></li>
<li id="L2" runat="server"><a id="A2" href="../newsFeed/allEe.aspx" runat="server"><span>Ee</span></a></li>
</ul>
</div>
代码背后的代码:
if (A1.HRef.ToString() == Request.Url.ToString())
{
L1.Attributes.Add("class", "active");
}
if (A2.HRef.ToString() == Request.Url.ToString())
{
L2.Attributes.Add("class", "active");
}
班级活跃的作品,我已经检查过了。
顺便说一句,此代码位于连接到<div id='settingNev' >
。
Tnx的帮助:D
答案 0 :(得分:1)
问题 A1.HRef 返回相对网址。另一方面, Request.Url 会返回绝对网址。
为了解决这个问题,您希望将服务器控件用于超链接,并将其解析回绝对路径。
<ul>
<li id="L1" runat="server">
<asp:HyperLink runat="server" ID="A1HyperLink"
NavigateUrl="~/newsFeed/allEr.aspx">
<span>Er</span>
</asp:HyperLink>
</li>
</ul>
string url = Request.Url.PathAndQuery;
string a1 = ResolveUrl(A1HyperLink.NavigateUrl);
if (string.Equals(a1, url, StringComparison.InvariantCulture))
{
L1.Attributes.Add("class", "active");
}
使用 ResolveUrl
解决A1与绝对路径的相对路径<div id='settingNev' >
<ul >
<li id="L1" runat="server"><a id="A1"
href="../newsFeed/allEr.aspx"
runat="server"><span>Er</span></a></li>
</ul>
</div>
string url = Request.Url.PathAndQuery;
string a1 = ResolveUrl(A1.HRef);
if (string.Equals(a1, url, StringComparison.InvariantCulture))
{
L1.Attributes.Add("class", "active");
}
答案 1 :(得分:0)
您需要将相对网址转换为绝对网址,以便与网页网址进行比较。
由于某些奇怪的原因,我找不到支持URL中父路径的任何Url助手,因此我能想到的唯一解决方法就是使用Server.MapPath()
:
string pagePath = Server.MapPath(Request.FilePath);
Dictionary<HtmlAnchor, Label> anchorMapping = new Dictionary<HtmlAnchor, Label>();
anchorMapping.Add(A1, L1);
anchorMapping.Add(A2, L2);
foreach (HtmlAnchor currentAnchor in anchorMapping.Keys)
{
if (Server.MapPath(currentAnchor.HRef).Equals(pagePath))
{
anchorMapping[currentAnchor].Attributes.Add("class", "active");
break;
}
}