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

  • BioHunta

    BioHunta

    28 Mayıs 2006
  • Project Mooncircle

    Project Moon

    6 Aralık 2009
  • Warner Bros. UK

    Warner Bros.

    6 HAZİRAN 2008