跨内部管道/请求的持久数据

时间:2015-02-20 13:20:19

标签: asp.net-mvc partial-views renderaction

基本上我有一个网页结构,页面的公共部分(标题,侧栏等)是在一个单独的控制器中生成的,该控制器充满了输出部分视图的子操作。然后我从网站的布局页面调用这些操作(使用RenderAction())。

所以(如果我正确地说这个),有多个内部mvc管道(标题/侧边栏内部请求),包括特定网页的原始请求管道。如何/在哪里可以初始化原始管道请求中的某些数据,并从其他内部mvc管道请求访问该数据?

我想要完成的总结(例如)

  1. 网站请求进来。
  2. MVC为" Home"控制器,"索引"行动。
  3. 在执行Action之前,需要创建一些以后可以访问的数据。
  4. 从布局页面中,有几个" RenderAction"执行方法为内部请求创建子管道(例如" Shell" controller," DisplayHeaderBar" action
  5. " DisplayHeaderBar"需要访问在渲染部分视图之前在步骤3中设置的一些数据
  6. 希望这是有道理的......

2 个答案:

答案 0 :(得分:0)

您正在寻找的是儿童行动。您只需在某个控制器中创建一个返回局部视图的操作。例如,您可以通过以下方式处理网站导航:

[ChildActionOnly]
public ActionResult SiteNavigation()
{
    // get the data for your nav
    return PartialView("_SiteNavigation", yourSiteNavModel);
}

ChildActionOnly属性确保此操作只能作为子操作调用,通过在浏览器的导航栏中键入URL使其无法访问。

然后,您在Views\Shared\_SiteNavigation.cshtml中创建一个视图:

@model Namespace.To.ClassForSiteNavigation

<!-- render your site navigation using the model -->

最后,在你的布局中:

@Html.Action("SiteNavigation", "ControllerWhereThisExists")

答案 1 :(得分:-2)

我认为你可以使用Tempdata。 Tempdate在您访问后会被删除,因此如果您想再使用这些数据,请使用Tempdata.Peek或Tempdata.Keep。

这是一个链接,其中包含一些如何在asp.net mvc中传递数据的解释。

https://msdn.microsoft.com/en-us/library/dd394711%28v=vs.100%29.aspx

如果tempdata没有这样做,那么你可以使用缓存。