4

所以,我有一个页脚,它将出现在我的 Web 应用程序的每个页面上

我需要它来呈现动态数据......这意味着每个控制器动作都需要返回包含此数据的 viewData ......以及特定于动作的数据

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

4

5 回答 5

5

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

您还可以考虑为公共数据创建一个仅查看模型(如果数据很广泛)并将其作为一个整体放入 ViewData。然后,您可以创建一个强类型的局部视图,该视图采用模型并在视图中更轻松地使用模型的属性。从母版页呈现这个部分视图可以很容易地合并每个页面上的数据并以强类型的方式使用它。

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

于 2009-05-17T20:05:29.797 回答
2

您可以创建一个ActionFilter将数据写入 ViewData 的方法,如下所示:

public class CustomActionFilter : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        filterContext.Controller.ViewData["WillNeedThis"] = "Foo";
    }
}

然后装饰你的控制器和/或需要这些数据的动作:

[CustomActionFilter]
public class HomeController : Controller {
   ...
}
于 2009-05-17T21:12:38.310 回答
1

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

在 ASP.NET MVC 中将数据传递到母版页

于 2009-05-17T19:53:01.617 回答
1

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

-- 站点.master --

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

有些人可能会争辩说,这混淆了 View 和 Controller 分离的水域,我可能不会在 ViewPage 中这样做,但我认为它是 MasterViewPage 中的一个不错的替代方案。

火焰开启 ;)

于 2009-05-18T16:04:02.093 回答
0

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

于 2009-05-17T19:59:23.320 回答