【发布时间】:2012-03-09 14:05:52
【问题描述】:
我有一个viewData,每个页面都需要它。如果我使用onActionExecuting 填写此ViewData。即使是部分页面的操作结果,它也会为每个操作填充。我希望每次页面加载仅填充一次 ViewData。
任何建议
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing viewdata
我有一个viewData,每个页面都需要它。如果我使用onActionExecuting 填写此ViewData。即使是部分页面的操作结果,它也会为每个操作填充。我希望每次页面加载仅填充一次 ViewData。
任何建议
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing viewdata
您可以使用 OnActionExecuting 事件并测试视图返回的结果是普通视图还是部分视图,并据此决定是否将信息添加到 ViewData:
public class MyActionFilter : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.Result is ViewResult)
{
filterContext.Controller.ViewData["foo"] = "bar";
}
}
}
为所有视图提供一些通用数据的另一种可能性是在单独的子操作中将其外部化,并使用Html.Action helper 将其包含在您的布局中。
【讨论】:
filterContext?还是filterContext.Result?或者是其他东西?您的确切代码如何?控制器动作呢?
OnActionExecuting 中将为空。此事件在操作运行之前执行,因此您还不能期望得到结果。您应该改用OnActionExecuted 事件。