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
。所以我接受这个答案。