在MVC3中渲染导航的最佳方式是什么?在我的应用程序中,控制器必须决定导航中的内容,但据我所知,无法将模型传递给_Layout文件(导航html所在的位置)以提供此信息。在MVC3中渲染导航
3
A
回答
6
您可以使模型适用于您的布局。
- 定义一个基类MyBaseModel,其中包含要用于布局的属性。
- 有你的模型子类MyBaseModel,并确保您填写的属性
- 让你的布局指定@model MyBaseModel
- 使用性能
参见this blog post哪里有类似的问题(“我们经常发现我们自己需要在每个页面中包含相同的信息“)。
4
最好是一个相对和主观的术语。我通常会用类似druttka的答案的方法去,但另一种选择是使用RenderAction()
调用控制器动作
<div>@Html.RenderAction("action", "controller")</div>
3
我将提供一些counterpoints到@ druttka的答案。但大多数情况下,你必须决定你想做什么交易。
如果您使用您的视图模型,你现在迫使两两件事:
- 每个视图必须是强类型
- 每一个动作都要调用该函数来填充包括导航各级在您的视图模型
第一点是没有那么糟糕,因为在一个典型的非静态网站这不会从模型中派生反正非常几页,它很容易创建一个空模型fo那些页面。然而,第二点更令人讨厌。每个函数都必须实例化它自己的模型,然后填充模型提供的每个导航级别的导航属性。这可能非常麻烦,但可以在OnActionExecuted
中对至少nav进行相当优雅的处理,这不是特定于给定操作的。
另一种方法是将nav添加到ViewBag
。这可以在任何时候完成,并且不会强制您为每个视图指定模型,这对于您不需要指定模型的情况下的灵活性非常有用。但应该注意的是,asp.net mvc 3中的ViewBag
是动态类型的,您不能将其用作lambda函数中的参数,从而阻止您在布局中执行类似@Html.DisplayFor(viewBag => viewBag.MainNav)
的操作,这是一个真正的拖延。您仍然可以渲染部分并指定适当的DisplayTemplate。
相关问题
- 1. Silverlight不渲染导航
- 2. MVC3中的部分渲染
- 3. 导航栏引导渲染问题
- 4. 在asp.net中渲染部分页面MVC3
- 5. 导航实验无法渲染覆盖
- 6. Zend的导航渲染问题
- 7. 导航菜单 - 渲染将管道符
- 8. mvc3渲染iframe的视图
- 9. 从xml渲染mvc3中的页面
- 10. 导航在zend框架中没有渲染的面包屑2
- 11. 渲染在上导轨
- 12. 渲染右侧的div并保持导航居中
- 13. 你如何覆盖Orchard CMS中导航区域的渲染?
- 14. 简单导航中的自定义渲染器(Rails Gem)
- 15. 在堆栈导航器标签上单击时渲染屏幕
- 16. 导航抽屉的渲染误差在ADT布局编辑器
- 17. MVC3 CkEditor性能渲染问题
- 18. MVC3 Html.BeginForm没有为页面渲染
- 19. MVC3自定义VirtualPathProvider不渲染剃刀
- 20. 渲染模板的HtmlHelper与MVC3 /剃刀
- 21. MVC3与MVCcontrib不渲染/生产HTML
- 22. MVC3 TextArea问题与HTML渲染
- 23. jqGrid不渲染mvc3剃须刀?
- 24. MVC DataAnnotation渲染错误HTMLin MVC3
- 25. 在渲染页面中渲染页面
- 26. 在lwjgl渲染中移动渲染器
- 27. 在导轨中渲染内联
- 28. 在渲染器中导入Typescript模块
- 29. 如何在导轨金属中渲染?
- 30. 渲染部分在导轨中
公平地说,对于我的个人网站,我使用基础模型进行布局,每个视图都有一个来自它的模型。这并不完美,但是每次你认为MVC都有问题时,只要做一点工作就可以实现扩展。 – 2011-03-02 15:54:31
+1是一个很好的选择。我在大多数情况下更喜欢这种方式,但最近被要求避免使用ViewBag并保留强类型的视图,所以这是我的头脑所在。 – 2011-03-02 15:54:34