如何使一个函数在 ASP.NET MVC 2 中的所有控制器上运行?

发布于 2024-10-18 03:01:50 字数 333 浏览 1 评论 0原文

我有一个函数:

  • 从模型(完成)获取一些信息
  • 从cookie(完成)获取一些信息,并
  • 在每个控制器上的ViewData(视图上)上设置新信息

此外,该函数需要在控制器运行时在每个控制器上运行正在打电话(我不知道该怎么做)。

我已经在 BaseController 上编写了这个函数,但出现错误:

未将对象引用设置为对象的实例。

而且,我认为这不是正确的方法。我正在使用 ASP.NET MVC 2 和 .NET 3.5。

谢谢你的帮助。

I have a function that :

  • gets some information from model ( done )
  • gets some information from cookie ( done ), and
  • set the new informations on ViewData ( on views ) on every controller

Also, the function need to run on every controller when the controller is calling (I don`t know how to do this).

I have write this function on a BaseController but I get an error:

Object reference not set to an instance of an object.

And, I think this is not the right way. I'm using ASP.NET MVC 2 and .NET 3.5.

Thx for your help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

画尸师 2024-10-25 03:01:50

创建自定义操作过滤器

public class MyActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        // if the ActionResult is not a ViewResult (e.g JsonResult, ContentResult),
        // there is no ViewData so don't do anything.
        var viewResult = filterContext.Result as ViewResult;

        if (viewResult != null)
        {
           // call your function, do whatever you want to the result, e.g:
           viewResult.ViewData["someKey"] = someData;
        }
    }
}

在您的基本控制器上打那个坏男孩:

[MyActionFilter]
public class BaseController : Controller
{

}

现在,在执行每个控制器的每个 ActionResult 后,您的操作过滤器逻辑将被执行。

您还有一些其他事件可以挂钩,但听起来您想在执行操作后做一些事情,所以我认为上面的内容应该适合您。

Create a custom action filter:

public class MyActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        // if the ActionResult is not a ViewResult (e.g JsonResult, ContentResult),
        // there is no ViewData so don't do anything.
        var viewResult = filterContext.Result as ViewResult;

        if (viewResult != null)
        {
           // call your function, do whatever you want to the result, e.g:
           viewResult.ViewData["someKey"] = someData;
        }
    }
}

Slap that bad boy on your base controller:

[MyActionFilter]
public class BaseController : Controller
{

}

Now, after every ActionResult for every Controller is executed, your action filter logic will be executed.

You've got a few other events you can hook into, but it sounds like you want to do some stuff after the action has been executed, so i think the above should suit you fine.

说好的呢 2024-10-25 03:01:50

在升级之前它不会为您提供帮助,但在 ASP.NET MVC 3 中您可以使用全局操作过滤器来实现此目的。

http:// /weblogs.asp.net/gunnarpeipman/archive/2010/08/15/asp-net-mvc-3-global-action-filters.aspx

It won't help you until you upgrade but in ASP.NET MVC 3 you can use a global action filter for this purpose.

http://weblogs.asp.net/gunnarpeipman/archive/2010/08/15/asp-net-mvc-3-global-action-filters.aspx

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文