Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何检查动作结果是局部视图还是局部视图?_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

Asp.net mvc 如何检查动作结果是局部视图还是局部视图?

Asp.net mvc 如何检查动作结果是局部视图还是局部视图?,asp.net-mvc,asp.net-mvc-5,Asp.net Mvc,Asp.net Mvc 5,有没有办法在客户端找出执行了什么样的操作?我只想知道视图是由PartialView方法还是view方法生成的 protected override PartialViewResult PartialView(string viewName, object model) { Response.AddHeader("is-partial", "of_course_this_is_partial"); return base.PartialView(viewName, model);

有没有办法在客户端找出执行了什么样的操作?我只想知道视图是由
PartialView
方法还是
view
方法生成的

protected override PartialViewResult PartialView(string viewName, object model)
{
    Response.AddHeader("is-partial", "of_course_this_is_partial");
    return base.PartialView(viewName, model);
}
我查看了标题,但没有发现任何有用的内容。 为了实现这一点,我可以通过覆盖
PartialView
方法将一些头添加到http响应中

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

但我想知道MVC5中是否有内置的解决方案?因此,我不必在任何地方都使用自定义派生的控制器类。

您可以使用操作筛选器:

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);
}

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

您可以检查内容中是否存在html标记,该标记仅从ViewResults@Slicksim这闻起来有点脏;)我不想对每个请求都解析整个响应。也许是脏的,但考虑到您想要调整mvc管道以添加PartialView的头,这种方式至少不需要修改头集来检测它。就我个人而言,当它是ajax requestlol时,我会阻止视图退出,我怎么会错过这个呢。我已经有了一个
ActionFilter
,但我没有想到:(。顺便说一句,非常感谢。这非常酷。我想,MVC没有添加任何标志来确定发送了什么类型的
ActionResult
。所以我接受这个答案。