2010-09-04 10 views
26

मुझे मेनू में सक्रिय लिंक को हाइलाइट करने की आवश्यकता है। मेरा मेनू रास्ते में मास्टर पेज में है। मैं इसे लागू करने का सबसे अच्छा तरीका ढूंढ रहा हूं? कोई विचार?Asp.Net Mvc वर्तमान पृष्ठ लिंक तकनीक को हाइलाइट करते हुए?

+0

Hw आप मेनू आइटम स्टोर करते हैं पर एक नजर है चाहते हैं, तो? आप उन्हें इन मानों पर नियंत्रक और क्रिया के साथ जोड़ सकते हैं और हाइलाइट कर सकते हैं। – LukLed

+0

मैं उन्हें एक मास्टरपेज में स्थिर के रूप में संग्रहीत कर रहा हूं। – beratuslu

+0

पहले से ही कवर किया गया है? देखें: http://stackoverflow.com/questions/1471362/how-to-visually-indicate-current-page-in-asp-net-mvc – thmshd

उत्तर

39

इसे संभालने का सबसे अच्छा तरीका एक HTML सहायक लिखना है। वर्तमान में निष्पादित कार्रवाई प्राप्त करने और मेनू नाम की तुलना करने के लिए आप RouteData.Values["action"] का उपयोग कर सकते हैं और यदि वे मेल खाते हैं तो एक सीएसएस क्लास लागू करें जो इसे हाइलाइट करेगा।

public static MvcHtmlString MenuItem(
    this HtmlHelper htmlHelper, 
    string action, 
    string text 
) 
{ 
    var menu = new TagBuilder("div"); 
    var currentAction = (string)htmlHelper.ViewContext.RouteData.Values["action"]; 
    if (string.Equals(
      currentAction, 
      action, 
      StringComparison.CurrentCultureIgnoreCase) 
    ) 
    { 
     menu.AddCssClass("highlight"); 
    } 
    menu.SetInnerText(text); 
    return MvcHtmlString.Create(menu.ToString()); 
} 

और फिर मेनू आइटम प्रस्तुत करने के लिए इस सहायक का उपयोग करें:

<%: Html.MenuItem("about", "About us") %> 
<%: Html.MenuItem("contact", "Contact us") %> 
... 
+2

हाय, डारिन। एचटीएमएल हेल्पर्स कहां रखता है? एक नया फ़ोल्डर और फिर इसे शामिल करने के लिए "आयात" का उपयोग करें? मैं इसका उपयोग कैसे कर सकता हूं? धन्यवाद। – user1477388

+0

हाँ, इसे कहां रखा जाए? – 4pie0

+2

कोई सम्मेलन और न ही विशिष्ट स्थान कस्टम HTML सहायकों डाल करने के लिए है। व्यक्तिगत रूप से मैं एक हेल्पर्स फ़ोल्डर में एक्सटेंशन विधियों को रखता हूं। –

0

मैं बहुत आप शुद्ध सीएसएस के साथ ऐसा कर सकते हैं यकीन है। इसमें बॉडी टैग के साथ क्लास चयनकर्ता और फफिंग शामिल है। मैं सप्ताह के हर दिन सहायक विधि के साथ जाऊंगा।

0

मैं इस समाधान का उपयोग करें: - आपके मेनू में विशेषता डेटा-menuPageId जोड़ने लिंक

<ul class="menu"> 
    <li data-menuPageId="home"> 
      @(Html.Link<HomeController>(x => x.Index(), "Home")) 
    </li> 
    <li data-menuPageId="products"> 
      @(Html.Link<ProductsController>(x => x.Index(), "Products")) 
    </li> 
</li> 

अगला -

पहले वर्तमान पृष्ठ के लिए छिपे हुए फ़ील्ड जोड़ने ईद

<input type="hidden" id="currentPageId" value="@(ViewBag.Page ?? "home")" /> 
Layout.cshtml को

होम पेज या उत्पाद

जैसे पृष्ठों पर ViewBag.Page प्रारंभिक जोड़ें जोड़ें

और अंत में आप yor Layout.cshtml से इस javascipt संदर्भ

$(function() { 
    var pageIdAttr = "data-menuPageId"; 
    var currentPage = $("#currentPageId").attr("value"); 

    var menu = $(".menu"); 

    $("a[" + pageIdAttr + "]").removeClass("selected"); 
    $("a[" + pageIdAttr + "=\"" + currentPage + "\"]", menu).addClass("selected"); 
}); 
7

मैं हमेशा इस समाधान एचटीएमएल भाग

<ul> 
    @Html.ListItemAction("Home Page","Index","Home") 
    @Html.ListItemAction("Manage","Index","Home") 
</ul> 

हेल्पर भाग

public static class ActiveLinkHelper 
    { 
     public static MvcHtmlString ListItemAction(this HtmlHelper helper, string name, string actionName, string controllerName) 
     { 
     var currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"]; 
     var currentActionName = (string)helper.ViewContext.RouteData.Values["action"]; 
     var sb = new StringBuilder(); 
     sb.AppendFormat("<li{0}", (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase) && 
              currentActionName.Equals(actionName, StringComparison.CurrentCultureIgnoreCase) 
               ? " class=\"active\">" : ">")); 
     var url = new UrlHelper(HttpContext.Current.Request.RequestContext); 
     sb.AppendFormat("<a href=\"{0}\">{1}</a>", url.Action(actionName, controllerName), name); 
     sb.Append("</li>"); 
     return new MvcHtmlString(sb.ToString()); 
    } 
} 
0

में उपयोग कर रहा हूँ चाहिए लेआउट निम्न की तरह प्रयास करें:

@{ 
    string url = Request.RawUrl; 
} 
@switch (url) 
{ 
    case "/home/":     
     @Html.ActionLink("Home", "../home/", null, new { @style = "background:#00bff3;" }) 
     @Html.ActionLink("Members", "../home/MembersList/") 
    break; 
    case "/home/MembersList/": 
     @Html.ActionLink("Home", "../home/") 
     @Html.ActionLink("Members", "../home/MembersList/", null, new { @style = "background:#00bff3;" }) 
    break; 
    default: 
      @Html.ActionLink("Home", "../home/") 
      @Html.ActionLink("Members", "../home/MembersList/") 
    break; 
} 
संबंधित मुद्दे