在我的httpmodule中没有触发BeginRequest事件

时间:2011-02-28 12:04:27

标签: c# .net events asp.net-mvc-3 httpmodule

我有一个httpmodule,但是因为迁移应用程序.NET 4已经遇到了一些线索行为。 BeginRequest事件不会在某些请求上触发(但在其他请求中也会触发) - 我还没有设法找出一个模式,以确定它是什么时候到目前为止都没有被触发。

EndRequest事件似乎总是被触发。

我找到了这篇文章: http://connect.microsoft.com/VisualStudio/feedback/details/535999/beginrequest-event-is-not-raised-in-my-http-module-on-iis7

但是微软唯一的建议似乎是需要在system.webServer / modules部分创建一个条目 - 我已经有了这个。

                

我对.net和mvc很新 - 有没有人有任何建议我如何追查这个问题的原因?

非常感谢任何帮助/建议。

1 个答案:

答案 0 :(得分:3)

我花了很多时间试图破解它为什么不总是开火!这是答案: 您需要围绕正在调用的请求更新面板。因此,如果您有一个按钮,例如需要调用开始和结束请求处理程序,那么您可以在按钮周围放置一个Ajax更新面板,并将“UpdateMode”设置为“Always”。这是因为这些javascript事件仅在异步回发之前和之后触发。 Ajax更新面板将提供异步调用。

示例:

<script type="text/javascript" language="javascript">
    Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    function BeginRequestHandler(sender, args) {
        //Some code
    }
    function EndRequestHandler(sender, args) {
        //Some code
    }
</script>

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel runat="server" ID="UpdatePanel6" UpdateMode="Always">
    <ContentTemplate>
        <asp:Button runat="server" ID="btnGo" Text="Go" OnClick="btnGo_OnClick"/>    
    </ContentTemplate>
</asp:UpdatePanel>

请注意,这是asp.net中正确的方法。我对MVC不太了解。希望有所帮助。