如何在ASP.NET MVC中构建选项卡式菜单?

Fle*_*sym 9 asp.net-mvc

我想构建一个与StackOverflow的配置文件管理非常类似的选项卡式菜单.

标签菜单StackOverflow http://img410.imageshack.us/img410/3037/image1nw​​r.jpg

当你看一下网址时,它说:/ users/flesym?tab = stats或?tab = prefs.我能够创建选项卡式菜单,但我想知道如何调用操作方法并根据所选选项卡显示结果.

我尝试使用局部视图.但是当我的页面/ users/flesym继承自Mvc.ViewPage(myApplication.Models.User)时,我不能在我的局部视图中使用另一个继承(例如,我想使用Mvc.ViewUserControl(myApplication.Models).格式)).

有关如何做的任何想法?

eu-*_*-ne 9

创建视图模型:

public class UserViewModel {
    public myApplication.Models.User User;

    public string PartialViewName;

    public PartialViewModelBase Tab;
}
Run Code Online (Sandbox Code Playgroud)

为每个Tab创建视图模型,派生自PartialViewModelBase:

public abstract class PartialViewModelBase {
}

public class Tab1PartialViewModel : PartialViewModelBase {
    ...
}

public class TabNPartialViewModel : PartialViewModelBase {
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后强烈键入您的View和PartialViews:

视图:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<UserViewModel>" %>
Run Code Online (Sandbox Code Playgroud)

PartialViews:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Tab1PartialViewModel>" %>

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<TabNPartialViewModel>" %>
Run Code Online (Sandbox Code Playgroud)

然后在您的视图中,您可以将部分视图用作:

<% Html.RenderPartial(Model.PartialViewName, Model.Tab); %>
Run Code Online (Sandbox Code Playgroud)

在您的控制器操作中:

public ActionResult YourAction(string tab)
{
    // check if tab is valid !!!

    var model = new UserViewModel {
        User = new myApplication.Models.User();
        PartialViewName = tab;
        Tab = TabRepository.GetTabByName(tab);
        /*
         * or
         * Tabs = (new Dictionary<string, type> {
         *     {"Tab1", typeof(Tab1PartialViewName)},
         *     {"TabN", typeof(TabNPartialViewName)}
         *     })[tab];
         */
    };

    Return View(model);
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.