【问题标题】:How do I perform an action before any view(or partial) is rendered?如何在呈现任何视图(或部分视图)之前执行操作?
【发布时间】:2013-11-19 11:31:12
【问题描述】:

我的问题很简单。我想知道在呈现任何视图(或部分)之前是否有默认情况下(由 ASP.Net 引擎)自动调用的方法(或其他东西)。我喜欢拦截它来执行一个动作,例如生成一个随机数。

如果有人有更好的主意,我会解释我的方案。

我的应用程序的视图和部分渲染具有如下 id 模式的元素:Model_Id。在某些情况下,当用户打开一个模式窗口,其视图重复主窗口的任何元素的 id 时,我的 jquery 选择器会感到困惑。我已经创建了 custom 助手来执行该行为,所以我考虑生成随机数(并将其存储在会话中)并将其连接到 id 中,以获得类似 Model_Id_1234 或 @987654323 的内容@。

如果有更好的方法,很高兴知道。

【问题讨论】:

    标签: javascript jquery asp.net asp.net-mvc razor


    【解决方案1】:

    你可以写一个custom action filter 来让你在动作执行之前拦截。然后将使用以下方法调用它:

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // do your pre action display stuff here!!
        // if the code is added to basecontroller - 
        // also optionally defer back to base.OnActionExecuting(filterContext);
        base.OnActionExecuting(filterContext);
    }
    

    我将在答案中添加更多细节,就像刚才在运输中一样。

    参见this post on MSDN,它涵盖了 MVC 的控制器管道。

    [编辑] - 回复评论,另请参阅此 SO 答案:Calling the Session before any Controller Action is run in MVC。实际上,在这个例子中,我们没有创建一个动作过滤器,我们只是覆盖了基本控制器内部的OnActionExecuting

    【讨论】:

    • 但是我必须在我想要该行为的每个控制器上添加该过滤器,对吗?有办法自动完成吗?
    • 好吧,您可以添加一个基本控制器来实现这一点。我之前回答过一个类似的问题,与这种类型的使用有关。让我为您参考并添加答案..
    • 我正在寻找其他东西来测试这个解决方案,我找到了另一个对我有帮助的答案。所以你一口气帮了我3个答案哈哈。谢谢,它奏效了。保持这份出色的工作!
    • 大声笑,当你得到旧的3 for the price of one... 场景时,我很高兴。很高兴你启动并运行..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    相关资源
    最近更新 更多