2011-08-15 13 views
4

MVCアプリケーションの共有ファイル_layout.cshtm(マスターページ)にいくつかのリスト項目があります。以下のような子ページからMVCのマスターページで右メニューを選択

何か:

<li class="selected">Home</li> 

など:ユーザーがホームページにあるとき

<ul> 
    <li>Home</li> 
    <li>about</li> 
    <li>contact</li> 
    <li>blog</li> 
</ul> 

が、私はそうのように、クラスselectedを持っている家庭liアイテムが欲しいです。これを行う最善の方法は何ですか?

通常のasp.netウェブサイトでは、私はマスターページにメソッドを持っていて、そのメソッドを子ページから呼び出していましたが、MVCでは何をすべきか分かりません。

ありがとうございました。

カスタムヘルパーメソッド書くことができ

答えて

11

:その後、

public static MvcHtmlString MenuItem(
    this HtmlHelper htmlHelper, 
    string text, 
    string action, 
    string controller 
) 
{ 
    var li = new TagBuilder("li"); 
    var routeData = htmlHelper.ViewContext.RouteData; 
    var currentAction = routeData.GetRequiredString("action"); 
    var currentController = routeData.GetRequiredString("controller"); 
    if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) && 
     string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase)) 
    { 
     li.AddCssClass("selected"); 
    } 
    li.SetInnerText(text); 
    return MvcHtmlString.Create(li.ToString()); 
} 

と:

<ul> 
    @Html.MenuItem("Home", "home", "home") 
    @Html.MenuItem("About", "about", "home") 
    @Html.MenuItem("Contact", "contact", "home") 
    @Html.MenuItem("Blog", "blog", "home") 
</ul> 

ヘルパーは、現在のアクションとコントローラをチェックし、それらが一致する場合は、1つはヘルパーそれに引数として渡さをliselected CSSクラスを追加します。

+1

@{ ViewBag.Title = "Welcome to my homepage"; ViewBag.SelectedMenu = "Home"; } 

は、このチュートリアルから私のアイデアを手に入れましたこんにちは、どこに追加しますか? – LocustHorde

+1

@ LocustHorde、これを 'HtmlHelper'クラスの拡張メソッドとして定義します。あなたはあなたが望む静的なクラスに置くことができます。カスタムHTMLヘルパーの作成の詳細については、次の記事を参照してください。http://www.asp.net/mvc/tutorials/creating-custom-html-helpers-cs –

0

はちょうど私が何を共有したいと思った:

私はフォルダApp_Codeを作成し、CustomHelpers.cshtmlを追加します。私は私のメニューがつくれする場所私はこれを追加私のマスターページ(_Layout.cshtml)よりも

@helper MainMenu(string SelectedItem) { 
    <ul class="MainMenu"> 
     <li><a href="/home" @if (SelectedItem == "Home") { <text>class="Active"</text> }>Home</a></li> 
     <li><a href="/about" @if (SelectedItem == "About") { <text>class="Active"</text> }>About</a></li> 
     <li><a href="/foo" @if (SelectedItem == "Foo") { <text>class="Active"</text> }>Foo</a></li> 
    </ul> 
} 

@CustomHelpers.MainMenu(ViewBag.SelectedMenu) 

そして、私の見解ではなく、同じようにそれで私はこのようなものを作成します私は私のページのタイトルを変更、私は私の選択メニューを変更します。www.asp.net/mvc/videos/mvc-3/mvc-3-razor-helpers

関連する問題