2

我是 ASP.Net MVC 的新手,想知道是否有与 CakePHP 等中的回调函数或beforeFilter()方法afterFilter()等效beforeRender()

我想做的是使用ViewBag设置一些全局变量PageTitle,例如我有多个模块共享相同的标题和其他属性。

我以前也有一个父类——它AppController在 CakePHP 中被调用,它可以实现那些使我能够运行函数并将变量发送到我的视图的回调函数。我在 ASP.Net MVC 中做了类似的事情,但它现在没用了,因为我无法在函数运行之前启动我想要运行的Index()函数。

应用控制器.cs

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

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

家庭控制器.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及其方法:

  • OnAction执行
  • OnActionExecuted
  • OnResultExecuting
  • OnResultExecuted
于 2012-05-28T20:56:39.530 回答