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 回答