2

私は ASP.Net MVC を初めて使用し、CakePHP などのコールバック関数またはメソッドと同等のものがあるかどうか疑問に思っていbeforeFilter()ましたafterFilter()beforeRender()

私がやろうとしているのは、たとえば、同じタイトルや他のプロパティを共有する複数のモジュールがViewBagあるなど、いくつかのグローバル変数を設定するために使用することです。PageTitle

私はまた、親クラスのようなものを持っていAppControllerました.CakePHPで呼び出され、関数を実行して変数をビューに送信できるコールバック関数を実装できます。私はASP.Net MVCでこのようなことをしましたIndex()が、たとえば関数が実行される前に実行したい関数を起動できないため、今では役に立ちません。

AppController.cs

public class AppController : Controller
{
    public static string message = "Nice!";

    public void PageInfo()
    {
        ViewBag.Message = message;
    }
}

HomeController.cs

public class HomeController : AppController
{
    public ActionResult Index()
    {
        PageInfo();
        return View();
    }

    public ActionResult About()
    {
        return View();
    }
}

ばかげているように聞こえるかもしれませんが、ASP.Net の初心者であることは恐ろしいことなので、気をつけてください。

ありがとう

4

2 に答える 2

2

カスタム アクション フィルターを作成できます。

public class MyActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // This will run before the action
        filterContext.Controller.ViewBag.Message = "some message";
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        // This will run after the action
    }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        // This will run before the result executes
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        // This will run after the result executes
    }
}

次に、コントローラーをそれで装飾するか (この場合、このコントローラーのすべてのアクションに適用されます)、または個々のアクションに適用します。

[MyActionFilter]
public class HomeController : AppController
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult About()
    {
        return View();
    }
}
于 2012-05-29T05:57:46.773 に答える
0

必要なのは、抽象ActionFilterAttributeとそのメソッドを実装して、カスタム アクション フィルターを作成することだけです。

  • OnActionExecuting
  • OnActionExecuted
  • OnResultExecuting
  • OnResultExecuted
于 2012-05-28T20:56:39.530 に答える