有没有办法在客户端找出执行了哪种操作?我只是想知道视图是由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类并在任何地方使用它。
答案 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);
}
这样,标题会自动添加到每个结果中。