我想构建一个与StackOverflow的配置文件管理非常类似的选项卡式菜单.
标签菜单StackOverflow http://img410.imageshack.us/img410/3037/image1nwr.jpg
当你看一下网址时,它说:/ users/flesym?tab = stats或?tab = prefs.我能够创建选项卡式菜单,但我想知道如何调用操作方法并根据所选选项卡显示结果.
我尝试使用局部视图.但是当我的页面/ users/flesym继承自Mvc.ViewPage(myApplication.Models.User)时,我不能在我的局部视图中使用另一个继承(例如,我想使用Mvc.ViewUserControl(myApplication.Models).格式)).
有关如何做的任何想法?
创建视图模型:
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)
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
4571 次 |
| 最近记录: |