Стиль активной ссылки в ASP.NET - PullRequest
1 голос
/ 21 января 2010

У меня проблемы с главным меню на веб-сайте 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 ]

4 голосов
/ 21 января 2010

Как правило, я буду использовать ASP: Меню управления. Он обеспечивает приличный контроль над пунктами меню в нем.

Например, вот общий метод, который я добавляю в мастер-страницу и запускаю при первом обращении к странице. Этот метод перебирает элементы меню в элементе управления меню и выбирает пункт меню, который соответствует текущему 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>
0 голосов
/ 21 января 2010

Рассмотрите возможность реализации вашей "последней" переменной как статического члена вашей функции, вот как как это делается . Таким образом, его значение будет сохраняться между вызовами функций. Я не уверен, сохраняется ли он между загрузками страниц, но вы можете проверить это.

Если нет, вам придется каким-то образом указать ASP запомнить значение. Что касается этого, я так же полезен, как и вес кома.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...