Asp.net mvc ASP.net mvc页脚通用数据

Asp.net mvc ASP.net mvc页脚通用数据,asp.net-mvc,viewdata,Asp.net Mvc,Viewdata,因此,我有一个页脚,它将出现在我的web应用程序的每个页面上 我需要它来渲染动态数据,以便。。。。这意味着每个控制器操作都需要返回包含此数据的viewData。。以及具体行动的数据 你们将如何实现这一点?基本控制器的构造函数?您可以将数据传递到母版页并在那里显示页脚: 如果数据不复杂,我会使用ViewData字典来存储这些信息。如果是,我将所有模型的页脚数据放在基类中,然后将页脚移动到ContentPlaceholder中。这有点烦人,因为您必须将其放在每个查看页面上。基本控制器的想法是正确的,

因此,我有一个页脚,它将出现在我的web应用程序的每个页面上

我需要它来渲染动态数据,以便。。。。这意味着每个控制器操作都需要返回包含此数据的viewData。。以及具体行动的数据


你们将如何实现这一点?基本控制器的构造函数?

您可以将数据传递到母版页并在那里显示页脚:


如果数据不复杂,我会使用ViewData字典来存储这些信息。如果是,我将所有模型的页脚数据放在基类中,然后将页脚移动到ContentPlaceholder中。这有点烦人,因为您必须将其放在每个查看页面上。

基本控制器的想法是正确的,但我会覆盖OnActionExecuted并在那里生成数据。在生成公共数据之前,请检查结果是否为ViewResult。如果结果是重定向或数据通过AJAX返回,则无需生成数据

您也可以考虑为公共数据创建一个仅视图模型(如果数据是广泛的),并将其作为一个整体放在ViewData中。然后,您可以创建一个强类型局部视图,该视图接受模型并在视图中更容易地使用模型的属性。从母版页呈现此部分视图将使在每个页面上合并数据和以强类型方式使用数据变得容易


如果页脚数据或格式不复杂,那么只在母版页中添加标记可能更好。

您可以创建一个
操作过滤器,将数据写入ViewData,如下所示:

public class CustomActionFilter : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        filterContext.Controller.ViewData["WillNeedThis"] = "Foo";
    }
}
然后装饰需要这些数据的控制器和/或操作:

[CustomActionFilter]
public class HomeController : Controller {
   ...
}

使用程序集中的Html.RenderAction()方法怎么样

--Site.master--


有人可能会说,这混淆了视图和控制器分离的水域,我可能不会在ViewPage中这样做,但我认为在MasterViewPage中这是一个不错的选择

点燃;)

  <div id="footer">
        <% Html.RenderAction("SomeAction", "SomeController",
               new { someParam = ViewData["someValue"] }); %>
  </div>