在每个操作上填充ViewData,但不在渲染上填充

时间:2012-02-18 11:18:37

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing viewdata

我需要在每个页面上提供viewData。如果我使用ViewData填充此onActionExecuting。即使对于部分页面的动作结果,它也会被填充。我希望ViewData只为每个页面加载填充一次。 任何建议

1 个答案:

答案 0 :(得分:2)

您可以使用OnActionExecuting事件并测试返回的结果b视图是普通视图还是部分视图,并根据该视图决定是否将信息添加到ViewData:

public class MyActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.Result is ViewResult)
        {
            filterContext.Controller.ViewData["foo"] = "bar";
        }
    }
}

为所有视图提供一些常用数据的另一种可能性是将其外部化为单独的子操作,并使用Html.Action helper将其包含在您的布局中。例如。