假设我有一个带有导航布局的网站。每次根据用户选择的选项请求页面时,都会构建此导航。此导航与呈现的特定视图实际上没有任何关系,除了它是布局所需的。问题是,这应该放在ViewData中还是应该要求模型继承NavigationModel?
ViewBag.NavItems = navItems;
或
public abstract class NavigationModel
{
public List<NavItem> NavItems { get; set;}
}
public class HomeModel : NavigationModel
{
}
答案 0 :(得分:4)
这听起来像是在视图内使用Html.RenderAction
来渲染导航的理想情况。这将调用NavigationController
上的一个操作,该操作将负责将菜单直接呈现到视图中。
一些MVC纯粹主义者认为Html.RenderAction
打破了真正的MVC架构;我认为这是一种委托责任来呈现视图的某些部分的方式,这些部分不是您正在渲染的“主”视图的主要责任。
答案 1 :(得分:2)
模型是否应包含构建视图所需的所有数据?
绝对肯定是。
问题是,这应该放在ViewData
中
绝对绝对没有。
如果可以将此导航窗口小部件视为您网站的完全独立部分,则还可以使用Html.Action and Html.RenderAction。