SORU
18 Ocak 2011, Salı


aktif menü öğesi - asp.net mvc3 Ana Sayfa

Atama için uygun bir çözüm "/güncel" class Ana Sayfa. menü öğeleri için etkin bulmaya çalışırken etrafı tarıyordum Bu istemci vs sunucu tarafı yapmak için olup olmadığı konusunda orta aşağı bölünmüş.

Açıkçası bir fikrim yok bu yüzden hem JavaScript ve MVC yeniyim. "" En uygun yol. en temiz bunu tercih ederim

Ben aşağıdaki jQuery kodu atamak için "active" class <li> ürün...tek sorun bu "dizin" veya varsayılan görünüm menü öğesi daima yanında olacağım atanan aktif sınıf, çünkü bu URL her zaman bir alt menü diğer bağlantılar:

(default) index = localhost/
link 1 = localhost/home/link1
link 2 = localhost/home/link1

$(function () {
 var str = location.href.toLowerCase();
  $('#nav ul li a').each(function() {
   if (str.indexOf(this.href.toLowerCase()) > -1) {
    $(this).parent().attr("class","active"); //hightlight parent tab
   }
});

Bu işi yapmanın daha iyi bir yolu var mı? Biri bana en azından bir tarafı istemci sürümü kurşun geçirmez yardımcı olur? "" Veya varsayılan bağlantı her zaman""? aktif dizin, böylece İndeksleme yöntemi için sahte bir uzantısı tahsis etmenin bir yolu var mı? sadece base URL yerine gibi her link bir alt olmaz ki localhost/home/dashboard olurdu?

Gerçekten, gerçekten istemci tarafında bunu yapmak için jQuery ile çalışıyorum bu yüzden bu sunucu tarafı, yapma yöntemleri takip etmiyorum...herhangi bir yardım mutluluk duyacağız.

CEVAP
19 Ocak 2011, ÇARŞAMBA


Özel bir HTML yardımcı genellikle bu işi gayet iyi yapar:

public static MvcHtmlString MenuLink(
    this HtmlHelper htmlHelper, 
    string linkText, 
    string actionName, 
    string controllerName
)
{
    string currentAction = htmlHelper.ViewContext.RouteData.GetRequiredString("action");
    string currentController = htmlHelper.ViewContext.RouteData.GetRequiredString("controller");
    if (actionName == currentAction && controllerName == currentController)
    {
        return htmlHelper.ActionLink(
            linkText,
            actionName,
            controllerName,
            null,
            new {
                @class = "current"
            });
    }
    return htmlHelper.ActionLink(linkText, actionName, controllerName);
}

ve senin Ana Sayfa:

<ul>
    <li>@Html.MenuLink("Link 1", "link1", "Home")</li>
    <li>@Html.MenuLink("Link 2", "link2", "Home")</li>
</ul> 

Şimdi geriye kalan tek şey tanımlamak .geçerli CSS sınıfı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Cristina Landa

    Cristina Lan

    28 Ocak 2010
  • TheFlashCentre

    TheFlashCent

    22 Mayıs 2008
  • undrmyumbrellaa

    undrmyumbrel

    25 Temmuz 2012