【问题标题】:Returning object model to a view, that is handled by different controller将对象模型返回到由不同控制器处理的视图
【发布时间】:2011-05-05 12:01:39
【问题描述】:


如何将对象模型传递给视图,即母版页上的部分视图?

问候

【问题讨论】:

  • 有两件事会有所帮助。 1)一个更清晰的问题,2)一些示例代码。

标签: asp.net-mvc-2 object model master-pages


【解决方案1】:

您可能会考虑创建另一个对象来更接近地表示您尝试渲染的视图。

假设我有一个MyDomain.Order 对象,所以我创建了一个类似于ViewPage<MyDomain.Order> 的视图页面。现在,假设我有一个由登录用户驱动的菜单,例如。将菜单作为MyDomain.Order 的属性是没有意义的。我将创建另一个对象,专门用于视图,将其命名为 OrderPageModel 之类的东西,并将 MyDomain.OrderList<MenuItem> 作为这个新对象的属性,我的视图设置为 ViewPage<OrderPageModel>

要考虑的另一件事可能是Html.RenderAction()。同样的场景,我有一个视图,正如您在问题中提到的那样,它有一个母版页,并且在我的示例中,可以说它托管您网站的通用菜单。您可以创建一个局部视图 (UserMenu.ascx) 和一个控制器 (SiteController.cs),其中包含一个计算菜单项的操作 (UserMenu)。在您的母版页中,您可以调用<% Html.RenderAction("UserMenu","SiteController") %>

如果它可以是为特定视图制作的东西,我会使用第一个示例:只需使其成为模型的一部分。如果它对网站来说更通用,比如菜单,我会使用第二个示例。

【讨论】:

  • 就我而言,我的 MasterPage 上有 LogIn.ascx 部分视图。然后我在 AccountController 中处理用户验证,然后我想将一些数据(对象模型)传递回该 Login.ascx 以显示用户名等。
  • 您不会使用母版页上的链接到登录页面的概念吗?您使用的是 Ajax 样式的登录吗?
【解决方案2】:

您可以指定视图的位置:

return PartialView("~/Views/SomeOtherController/SomePartial.ascx", someModel);

【讨论】:

    【解决方案3】:

    这里最好的选择是 RenderAction 优于 RenderPartial。您的子控制器可以轻松判断用户是否已登录并呈现正确的部分,而不是让您的母版页担心这些细节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-11
      • 2011-11-22
      • 1970-01-01
      相关资源
      最近更新 更多