在MVC3中渲染导航的最佳方法是什么?在我的应用程序中,Controller必须决定导航中的内容,但据我所知,无法将模型传递到_Layout文件(导航html所在的位置),以便为其提供此信息。
答案 0 :(得分:6)
您可以将模型用于您的布局。
另请参阅this blog post,其中遇到类似问题(“我们经常发现自己需要在每个页面中包含相同的信息”)。
答案 1 :(得分:4)
Best是一个相对主观的术语。我通常采用与druttka的答案类似的方法,但另一种选择是使用RenderAction()
来调用控制器动作
<div>@Html.RenderAction("action", "controller")</div>
答案 2 :(得分:3)
我将为@ druttka的回答提供一些对照。但大多数情况下,你必须决定你要做出哪些交易。
如果您为视图使用模型,则现在强制执行以下操作:
第一点并不是那么糟糕,因为在典型的非静态站点中很少有页面无论如何都不会从模型派生出来,并且很容易为这些页面创建一个空模型。然而,第二点更令人讨厌。每个函数都必须实例化它自己的模型,然后为模型提供的每个导航级别填充导航属性。这可能非常麻烦,但在OnActionExecuted
中可以相当优雅地处理至少导航,而不是特定于给定操作的导航。
另一种方法是将导航添加到ViewBag
。这可以在不强制您为每个视图指定模型的情况下完成,这对于您不需要指定模型的情况非常有用。应该注意的是,asp.net mvc 3中的ViewBag
是动态类型的,你不能将其用作lambda函数中的参数,从而阻止你在布局中做@Html.DisplayFor(viewBag => viewBag.MainNav)
之类的事情,这是一个真正的拖累。您仍然可以渲染部分并指定适当的DisplayTemplate。