0

我写了一个类似于日志功能的动作过滤器:

public class TrackActionFilterAttribute : ActionFilterAttribute, IActionFilter
{
   public override void OnActionExecuting(ActionExecutingContext filterContext)
   {
      Tracking track = new Tracking()
      {
        Action = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName + filterContext.ActionDescriptor.ActionName
      };
      context.Trackings.Add(track);
      context.SaveChanges();
   }
}

我有这样的行动方法:

[TrackActionFilter]
public ActionResult Index() 
{
  if (Request.Form["registered"] == 1) 
     return PartialView("Landing");
  else 
     return PartialView("Register");
}

[TrackActionFilter]
public ActionResult Landing() 
{
   return PartialView();
}

[TrackActionFilter]
public ActionResult Register()
{ 
   return PartialView();
}

我的问题是当索引操作被调用时,我只是将索引操作注册到数据库中。由于导航到 Index 将导致 Landing 或 Register Partial View,是否无论如何都可以在任何类型的操作过滤器中获取这些操作?

主要原因是因为我还想在我的数据库中跟踪这些操作,但我似乎无法做到这一点。我试过 ActionExecuted , ResultExecuted 无济于事。如果任何专家可以提供帮助将很高兴!

4

1 回答 1

2

您在操作过滤器中有访问请求参数:

filterContext.HttpContext.Request["registered"]

如果您想知道返回了哪个部分视图,则必须使用OnActionExecutedevent 因为此事件在控制器操作完成后运行:

public override void OnActionExecuted(ActionExecutedContext filterContext)
{
    var viewResult = filterContext.Result as ViewResultBase;
    if (viewResult != null)
    {
        // the controller action returned either a View or a partialView
        // => we could get its name:
        var name = viewResult.ViewName;
    }

    ...
}
于 2012-09-12T09:52:31.180 回答