【发布时间】:2011-05-05 12:01:39
【问题描述】:
如何将对象模型传递给视图,即母版页上的部分视图?
问候
【问题讨论】:
-
有两件事会有所帮助。 1)一个更清晰的问题,2)一些示例代码。
标签: asp.net-mvc-2 object model master-pages
如何将对象模型传递给视图,即母版页上的部分视图?
问候
【问题讨论】:
标签: asp.net-mvc-2 object model master-pages
您可能会考虑创建另一个对象来更接近地表示您尝试渲染的视图。
假设我有一个MyDomain.Order 对象,所以我创建了一个类似于ViewPage<MyDomain.Order> 的视图页面。现在,假设我有一个由登录用户驱动的菜单,例如。将菜单作为MyDomain.Order 的属性是没有意义的。我将创建另一个对象,专门用于视图,将其命名为 OrderPageModel 之类的东西,并将 MyDomain.Order 和 List<MenuItem> 作为这个新对象的属性,我的视图设置为 ViewPage<OrderPageModel>。
要考虑的另一件事可能是Html.RenderAction()。同样的场景,我有一个视图,正如您在问题中提到的那样,它有一个母版页,并且在我的示例中,可以说它托管您网站的通用菜单。您可以创建一个局部视图 (UserMenu.ascx) 和一个控制器 (SiteController.cs),其中包含一个计算菜单项的操作 (UserMenu)。在您的母版页中,您可以调用<% Html.RenderAction("UserMenu","SiteController") %>。
如果它可以是为特定视图制作的东西,我会使用第一个示例:只需使其成为模型的一部分。如果它对网站来说更通用,比如菜单,我会使用第二个示例。
【讨论】:
您可以指定视图的位置:
return PartialView("~/Views/SomeOtherController/SomePartial.ascx", someModel);
【讨论】:
这里最好的选择是 RenderAction 优于 RenderPartial。您的子控制器可以轻松判断用户是否已登录并呈现正确的部分,而不是让您的母版页担心这些细节。
【讨论】: