想象一下,您有一个安全的站点和一个可以通过多种方式生成的视图,具体取决于用户角色。比如,管理员看到所有,管理员看到一些列和一些操作按钮,用户看到其他列和其他操作按钮。
你会如何实现这个?据我所知,有三个主要选择:
我更喜欢第三种方法,但您是否看到了更好的方法来实现它?
提前谢谢
答案 0 :(得分:2)
根据视图的复杂程度,第一个或第三个选项对我来说似乎没问题。至于第二种选择;它通常建议避免视图中的逻辑,所以我要远离那个。
如果你选择第三个选项,你应该考虑使用EditorTemplates和DisplayTemplates。这将允许您使(主)视图与要呈现的部分视图无关。
使您的viewmodel(或其一部分)继承自单个基类。为每个视图模型类型创建显示和/或编辑器模板,并在视图中说出Html.DisplayFor( ... )
或Html.EditorFor( ... )
。 MVC将自动选择正确的模板,而无需在视图中使用逻辑。
答案 1 :(得分:0)
我一直在为菜单和其他导航项目做的是我有一个ViewModel类。这是一个简化版本。
<强>视图模型强>
public class Action
{
public string DisplayName { get; set; } // localized
public string Url { get; set;
}
public class MenuViewModel
{
public List<Action> Actions { get; set; }
public MenuViewModel()
{
this.Actions = new List<Action>();
}
}
我根据用户角色填写。管理员获得更多链接等。
ViewModel是“主”视图模型的一部分
public class AlbumEditorViewModel
{
public MenuViewModel Menu { get; set; }
}
然后我会传递负责菜单的部分视图的视图模型。
查看(剃刀)
@model AlbumEditorViewModel
.. razor stuff here ..
@Html.Partial("Menu", Model.Navigation)
.. razor stuff here ..
部分视图
@model MenuViewModel
<ul>
@foreach (var action in Model.Actions)
{
<li>
@GridHelper.GetAction(action)
</li>
}
</ul>
我希望这会给你一些想法