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 アクションが呼び出されたときです。Index アクションをデータベースに登録するだけです。インデックスに移動するとランディング ビューまたは登録部分ビューが表示されるため、いずれかのタイプのアクション フィルターでこれらのアクションを取得する方法はありますか?

主な理由は、データベース内でこれらのアクションも追跡したいのですが、それができないようです。私は ActionExecuted 、 ResultExecuted を無駄に試しました。どなたか専門家の助けがあれば幸いです!

4

1 に答える 1

2

アクションフィルターにアクセス要求パラメーターがあります。

filterContext.HttpContext.Request["registered"]

また、どの部分ビューが返されたかを知りたい場合は、イベントを使用する必要がありますOnActionExecuted。これは、このイベントがコントローラーアクションの終了後に実行されるためです。

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 に答える