ASP.NET中的活动链接样式

时间:2010-01-21 00:24:12

标签: asp.net javascript jquery css

我在ASP.NET网站上的主菜单遇到了一些问题。我想要的是,当用户点击链接时,它应该将其颜色更改为黑色并保持黑色,直到用户点击其他链接。

换句话说:我想突出显示所选链接。

到目前为止,我已经使用了一些解决方法JavaScript(我认为应该考虑使用jQuery),但问题是,样式不会保留在页面回发上(或者似乎......)

我目前的javascript:

<script type="text/javascript">
    var last = "none";
    function LinkSelector(link) {
        if (last != "none") {
            document.getElementById(last).className = "NormalLink";
        }
        document.getElementById(link).className = "ActiveLink";
        last = link;
    }
</script>

正如我所写的那样,它肯定会在点击时更改类名,但在加载新页面时不会保持这种状态。

任何人都有解决方法吗? :)

提前致谢。

一切顺利,

2 个答案:

答案 0 :(得分:4)

通常,我将使用ASP:Menu控件。它提供了对其中菜单项的适当控制。

例如,这是我在主页面中转储并在初始页面命中期间运行的通用方法。此方法循环遍历菜单控件中的菜单项,并选择与当前URL对应的菜单项。

protected void Page_Load(object sender, EventArgs e) {
        if (!Page.IsPostBack) {
            SelectMenuItem();
        }
    }

    private void SelectMenuItem() {
            string rawurl = Request.RawUrl.ToLower();

            rawurl = rawurl.Substring(rawurl.LastIndexOf("/") + 1);
            if (rawurl.IndexOf("?") >= 0)
                rawurl = rawurl.Substring(0, rawurl.IndexOf("?"));

            foreach (MenuItem mi in mnuMain.Items) {
                if (mi.ChildItems.Count == 0) {
                    if (mi.Value == rawurl) {
                        mi.Selected = true;
                        break;
                    }
                }
                else {
                    foreach (MenuItem cmi in mi.ChildItems) {
                        if (cmi.Value == rawurl) {
                            mi.Selected = true;
                            break;
                        }
                    }
                    if (mi.Selected)
                        break;
                }
            }
        }

以下是我在asp菜单控件中的一些菜单项。请注意,我使用Value属性来帮助我指示上述方法中哪个菜单项与请求的URL相关。

<Items>
  <asp:MenuItem Text="Forms" Value="authorization">
    <asp:MenuItem Text="New Authorization Form" Value="createauthform.aspx" NavigateUrl="~/CreateAuthForm.aspx"></asp:MenuItem>
    <asp:MenuItem Text="Manage My Authorization Forms" Value="myrequests.aspx" NavigateUrl="~/MyRequests.aspx"></asp:MenuItem>
    <asp:MenuItem Text="Audit Attendance Form" Value="auditform.aspx" NavigateUrl="~/AuditForm.aspx"></asp:MenuItem>
    <asp:MenuItem Text="Tax Determination Statement" Value="taxstatement.aspx"  NavigateUrl="~/TaxStatement.aspx"></asp:MenuItem>
  </asp:MenuItem>
</Items>

答案 1 :(得分:0)

考虑将“last”变量实现为函数的静态成员,这里是how it's done。这样,它的值将在函数调用之间保留。我不确定它是否在页面加载之间保留,但你可以测试它。

如果没有,您将不得不以某种方式指示ASP记住该值。关于那个,我和块重一样有用。