asp.net-mvc - Viewmodel 和动态菜单最佳实践 - ASP.NET MVC

标签 asp.net-mvc viewmodel

我在 asp.net MVC 中创建了一个新网站,其中包含一个根据用户而变化的动态菜单。但这还不是全部。我根据用户使用 2 种不同的布局(Razor 布局),并且 2 种不同的布局有不同的菜单。所以我有 2 个不同的布局和 2 个不同的动态菜单。

我想对 2 个布局使用相同的 View ,每个 View 一个 View 模型。我使用 Action 过滤器来确定布局。设计一个包含数据的“ViewModel”基类来显示两个菜单(即使每次只创建一个菜单)并为我的所有 View 模型创建这个基类的子类(每个 View 一个 View 模型)是一个好主意。

我想知道这是否是一个好习惯。是否应该使用 2 个 View (每个布局一个)并为公共(public)部分使用部分 View ?

如果我想根据布局在 View 上显示的内容存在一些差异,我应该使用 2 Views 而不是一个 Views 吗?

有什么建议吗?

最佳答案

在我看来,最好的做法是为您的 View 提供一个 View 模型,其上的属性包含一些确定动态菜单如何形成的对象。例子:

public class MyViewModel
{
     public int SomeData { get; set; } // basic Stuff
     public IDynamicMenuData MenuData { get; set; }
}

根据要为该用户呈现的菜单,您可以将动态菜单数据的实现分配给 View 模型。然后,在您看来,您可以调用:
@Html.DisplayFor(x => x.MenuData)

您想要动态菜单的位置。然后,您可以为每种类型的 IDynamicMenuData 实现创建一个显示模板,它将相应地呈现。然后,您只需要一个 View 、一个 View 模型,并且您可以拥有 X 个动态菜单的实现。

关于asp.net-mvc - Viewmodel 和动态菜单最佳实践 - ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5410486/

相关文章:

c# - 使用 mvc4 View 处理嵌套集合到 Controller

android - 使用 Android 导航组件在底部导航中的多个 fragment 之间共享 View 模型

wpf - 具有模型类型和自动创建 ViewModel 的自定义 DependencyProperty

c# - 如何在 ViewModel 之间访问数据?

javascript - 为什么ajax下的javascript actionlink函数在mvc中不起作用

c# - Convert.ToDateTime 出错

asp.net - ASP.NET 会捕获 WebRole 类中抛出的异常吗?

asp.net-mvc - ASP.NET MVC Entity Framework 对象上下文

javascript - 模型属性更新时 UI 不更新,由 knockout ES5 跟踪

viewmodel - Durandal:从另一个 View 模型访问一个 View 模型