如何检查操作结果是局部视图还是视图?

时间:2015-01-27 10:44:03

标签: asp.net-mvc asp.net-mvc-5

有没有办法在客户端找出执行了哪种操作?我只是想知道视图是由PartialView方法还是View方法生成的。

我查了标题但发现没什么用处。 为实现此目的,我可以通过覆盖PartialView方法将一些标头添加到http响应中。

protected override PartialViewResult PartialView(string viewName, object model)
{
    Response.AddHeader("is-partial", "of_course_this_is_partial");
    return base.PartialView(viewName, model);
}

但我想知道MVC 5中是否有内置的解决方案?所以我不必使用自定义派生的Controller类并在任何地方使用它。

1 个答案:

答案 0 :(得分:1)

您可以使用动作过滤器:

public class ResponseHeaderActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {

    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {

    }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        // use filterContext.Result to see whether it's a partial or not
        // filterContext.HttpContext.Response.AddHeader().. 
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {

    }        
}

如果您将其设置为全局操作过滤器,它将自动执行,您不必从基本控制器继承或将其作为属性放在控制器上:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    // Register global filter
    GlobalFilters.Filters.Add(new ResponseHeaderActionFilter());

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);
}

这样,标题会自动添加到每个结果中。