在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. 导航菜单 - 渲染将管道符
- 7. 从xml渲染mvc3中的页面
- 8. 在堆栈导航器标签上单击时渲染屏幕
- 9. 渲染右侧的div并保持导航居中
- 10. 你如何覆盖Orchard CMS中导航区域的渲染?
- 11. MVC DataAnnotation渲染错误HTMLin MVC3
- 12. MVC3与MVCcontrib不渲染/生产HTML
- 13. MVC3 Html.BeginForm没有为页面渲染
- 14. 渲染模板的HtmlHelper与MVC3 /剃刀
- 15. 在渲染页面中渲染页面
- 16. 在lwjgl渲染中移动渲染器
- 17. 如何在导轨金属中渲染?
- 18. 在渲染器中导入Typescript模块
- 19. Razor MVC3路由/导航
- 20. asp.net mvc3和多级导航
- 21. MVC3防止导航从
- 22. MVC3和面包屑导航
- 23. 页面导航与MVC3
- 24. MVC3在部分视图中渲染脚本
- 25. 在MVC3的循环中渲染部分视图
- 26. 在ASP.Net中渲染局部视图使用Ajax的MVC3 Razor
- 27. 渲染在page.tpl.php中
- 28. 的ReferenceError:导航不angular4与服务器端渲染
- 29. Magento的管理面板导航渲染钩入了ACL?
- 30. 导航器没有渲染任何东西
公平地说,对于我的个人网站,我使用基础模型进行布局,每个视图都有一个来自它的模型。这并不完美,但是每次你认为MVC都有问题时,只要做一点工作就可以实现扩展。 – 2011-03-02 15:54:31
+1是一个很好的选择。我在大多数情况下更喜欢这种方式,但最近被要求避免使用ViewBag并保留强类型的视图,所以这是我的头脑所在。 – 2011-03-02 15:54:34