将页面的网址与href进行比较

时间:2014-02-12 14:27:16

标签: c# html asp.net

我试图在页面的网址等于<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

2 个答案:

答案 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;
    }
}