模型是否应包含构建视图所需的所有数据?

时间:2011-04-13 21:46:39

标签: asp.net-mvc asp.net-mvc-3

假设我有一个带有导航布局的网站。每次根据用户选择的选项请求页面时,都会构建此导航。此导航与呈现的特定视图实际上没有任何关系,除了它是布局所需的。问题是,这应该放在ViewData中还是应该要求模型继承NavigationModel?

ViewBag.NavItems = navItems;

public abstract class NavigationModel
{
    public List<NavItem> NavItems { get; set;}
}

public class HomeModel : NavigationModel
{
}

2 个答案:

答案 0 :(得分:4)

这听起来像是在视图内使用Html.RenderAction来渲染导航的理想情况。这将调用NavigationController上的一个操作,该操作将负责将菜单直接呈现到视图中。

一些MVC纯粹主义者认为Html.RenderAction打破了真正的MVC架构;我认为这是一种委托责任来呈现视图的某些部分的方式,这些部分不是您正在渲染的“主”视图的主要责任。

答案 1 :(得分:2)

  

模型是否应包含构建视图所需的所有数据?

绝对肯定是。

  

问题是,这应该放在ViewData

绝对绝对没有。

如果可以将此导航窗口小部件视为您网站的完全独立部分,则还可以使用Html.Action and Html.RenderAction