asp.net - 在 Global.asax 中设置 session 变量会导致 AJAX 错误

标签 asp.net javascript global-asax

我的 asp.net 应用程序遇到了一个非常特殊的问题,我花了很长时间才找到它,但我仍然不知道是什么导致了这种行为。

如果我在 Application_PreRequestHandlerExecute 事件中设置一个 session 变量,那么我的外部 JavaScript 文件将被忽略,从而导致大量错误。我已经简化了下面的问题。

例如

我有一个名为 JScript.js 的文件,其中包含以下代码:

function myAlert() {
 alert("Hi World");
}

在我的 Default.aspx 文件中,我用代码引用了 js:

<script src="JScript.js" type="text/javascript"></script>

在正文 onload 事件中,我调用了 myAlert() 函数:

<body onload="myAlert()">

最后在 Global.asax 文件中:

Private Sub Application_PreRequestHandlerExecute(ByVal sender As Object, ByVal e As EventArgs)
   HttpContext.Current.Session("myVar") = "MyValue"
End Sub

如果您运行 Default.aspx 文件,您将看到没有调用 js 函数,但是,如果您注释掉代码行 Global.asax,那么外部当页面加载时调用 js 并执行该函数。

这是为什么?

最佳答案

PreRequestHandlerExecute 事件运行两次。一次用于 ASPX 文件,一次用于 JS 文件。当 ASPX 页面请求 JS 文件时 PreRequestHandlerExecute 事件运行时会发生问题。导致异常的 JS 文件的 Session 为 NULL(或 Nothing)。由于 JS 文件发生异常,因此该文件的内容(您的 myAlert 函数)永远不会加载到 ASPX 页面中。因此,ASPX 页面无法调用 myAlert 函数,因为从未加载 JS 文件。

关于asp.net - 在 Global.asax 中设置 session 变量会导致 AJAX 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2525176/

相关文章:

javascript - 如何使用 jquery 为下拉列表赋值

javascript - 为什么这个错误出现在 chrome load resource: net::ERR_QUIC_PROTOCOL_ERROR

c# - Application_Error 即使处理异常也会触发

asp.net - global.asax 断点未命中

c# - 如何从 ASP.Net 和 C#.Net 代码生成流程图?

asp.net - asp.net 页面中如何有 Html 实体?

php - 如何根据当前页面/网址获得 ="selected"类

javascript - 自定义 WMD 编辑器按钮的默认值 - 无法摆脱 wmd-prompt-background

.net - ASP.NET Sentry 配置

asp.net - 如何在 Apache 服务器上运行 ASP.NET 4.0 网站?