1

ナビゲーションリンクの行を実装する以下のコードで行う方法よりも、選択したアイテムを追跡するためのより良い方法はありますか?

@Html.ActionLink(       
        "PreApproval", 
        "Summary", 
        new { mode = "preapproval" }, 
        new { @class = Model.Mode == "preapproval" ? "selected" : "notselected" }) |
@Html.ActionLink(
        "ActionNeeded", 
        "Summary", 
        new { mode = (string)null }, 
        new { @class = string.IsNullOrWhiteSpace(Model.Mode) ? "selected" : "notselected" }) |
...

メニューナビゲーションの機能をカプセル化する必要がありますか、それともこれは標準的なアプローチですか?

4

1 に答える 1

2

これを小さなFunc<bool, string>ヘルパーにカプセル化することもできますが、それは何を購入するかによって異なります。質問にあるようにそれを持っていると、決定がリンクに近くなり、デバッグ中にヘルパーメソッドにジャンプすることなく、読みやすく理解しやすくなります。

このようなリンクが20以上ある場合は、リファクタリングする可能性があります。そうすれば、たとえば、cssクラス名が「selected/notselected」から「current/notcurrent」などに変更された場合に、1か所で更新できます。

もう1つ、MVC4では、CSSクラス名がnullまたは空の文字列である場合、Razorはクラス属性をまったくレンダリングしません(省略します)。そうすれば、「選択された」クラスを選択されたリンクに配置し、「選択されていない」クラスを取り除くことができます。

于 2012-08-30T09:37:24.807 に答える