2013-01-07 26 views
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

就我個人而言,我不喜歡視圖中的邏輯。作爲一個經驗法則,我通常將邏輯放在模型中,並將其傳遞給視圖,並相信該視圖可以顯示數據的外觀,而不是操縱數據。

作爲一個替代方法,你可以有一個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> 

這在我看來是清潔的。

+1

謝謝,這看起來不錯... – DON