4

私はmvc4でタブ付きビューを実装しています。そこで、部分ビューを実装しました。これは、タブ付き構造のすべてのビューで呼び出されます。以下のコードは、ビューから渡されたパラメーターに基づいてアクティブなタブを設定します。

<ul class="nav nav-tabs">
@{ var UserFocus = ""; var CardFocus = ""; var CarrierFocus = ""; }
@{
switch(ViewData["ActiveMenu"].ToString())
{
    case "User":
        UserFocus = "active";
        break;
    case "Card":
        CardFocus = "active";
        break;
    case "Carrier":
        CarrierFocus = "active";
        break;   
}
}
   <li class="@UserFocus">User view link</li>
   <li class="@CardFocus">card view link</li>
   <li class="@CarrierFocus">Carrier view link</li>
</ul>

そして、すべてのビューで、ビューに基づいてこのように呼び出されます

@Html.Partial("_AdminSettings", new ViewDataDictionary {{ "ActiveMenu", "User" }} )

これは正常に機能しています。

  1. 実装が標準的な方法であるかどうかはわかりますか?
  2. この実装のための他の簡単な方法はありますか?
4

1 に答える 1

4

個人的には、ビューのロジックは好きではありません。経験則として、私は通常、ロジックをモデルに配置し、それをビューに渡します。ビューは、データを操作するのではなく、データがどのように見えるかを表示するためにあると信じています。

Navigation Model別のアプローチとして、次のように渡すことができます。

ViewData["ActiveMenu"]

コントローラに追加し、を入力しNavigation Modelます。

public class NavigationModel 
{
    public string UserFocus { get; private set; } 
    public string CardFocus { get; private set; }
    public string CarrierFocus { get; private set; }

    public NavigationModel(string ActiveMenu)
    {
       // Your switch statement to populate the properties.
    }
}

ビューは次のようになります。

@Model NavigationModel

<ul class="nav nav-tabs">
  <li class="@Model.UserFocus">User view link</li>
  <li class="@Model.CardFocus">card view link</li>
  <li class="@Model.CarrierFocus">Carrier view link</li>
</ul>

私の意見ではどちらがよりきれいです。

于 2013-01-07T11:56:01.323 に答える