2017-03-22 5 views
0

MVCのブートストラップナビバーに「アクティブ」クラスを追加しようとしていますが、大きな問題があります。メインアクションに基づいて部分ビューにアクティブクラスを追加する方法

私はこのヘルパーを使用していますが、関数を呼び出すアクションが_PartialViewNameなので、Navbarを部分ビューに配置しているので機能しません。

public static string IsActive(this HtmlHelper html, 
    string control, string action) 
{ 
    var routeData = html.ViewContext.RouteData; 

    var routeAction = (string)routeData.Values["action"]; 
    var routeControl = (string)routeData.Values["controller"]; 

    // both must match 
    var returnActive = control.ToUpper() == routeControl.ToUpper() && 
     action.ToUpper() == routeAction.ToUpper(); 

    return returnActive ? "active" : ""; 
} 

この問題を回避する方法はありますか?とにかくありがとうございました。

+0

あなたは親コンテキストを取得する必要があります - 'VAR routeData = html.ViewContext.ParentActionViewContext.RouteDataは;' –

+0

これが働いていました。どうもありがとうございました。 –

答えて

0

次のコードを使用して、マルチレベルのブートストラップナビゲーションバーでアクティブに設定します。 あなたはそのコードを試すことができます。

<script type="text/javascript"> 
var action = "@ViewContext.RouteData.Values["action"]"; 
var controller = "@ViewContext.RouteData.Values["controller"]"; 
var area = "@ViewContext.RouteData.DataTokens["area"]"; // use only when u have area 
    var pathname = window.location.pathname.toString(); 
    if (pathname.indexOf(action) > -1) { 
     var st = "/" + action; 
     pathname= pathname.replace(new RegExp(st,'g'), ''); 
    } 
function active(e) { 
    e.addClass('active'); 
    if (e.closest('ul').length > 0) { 
     menuOpen(e.closest('ul')); 
    } 
} 
function menuOpen(m) { 
    m.addClass('menu-open'); 
    if (m.closest('li').length > 0) { 
     active(m.closest('li')); 
    } 
} 
if (action != null && action == "Index" && area != "") { 
    var $z = $('a[href="' + pathname + '"]').closest('li'); 
    active($z); 
} 
else if (area != null && action != "Index" && controller != "Home") { 
    var $z = $('a[href="' + pathname +'/'+ action + '"]').closest('li'); 
    if ($z.length > 0) { 
     active($z); 
    } 
    else { 
     var $z = $('a[href="' + pathname+'"]').closest('li'); 
     active($z); 
    } 
} 
else if (area == "" && controller != "Home") { 
    var $z = $('a[href="' + pathname + '"]').closest('li'); 
    active($z); 
} 
else if (controller == "Home" && action == "Index") { 
    var $z = $('a[href="' + pathname + '"]').closest('li').addClass('active'); 
} 
else { 
    var $z = $('a[href="' + pathname + '"]').closest('li').addClass('active'); 
} 
</script> 
関連する問題