2

是的,著名的“'Sys' 未定义”Microsoft JS 问题。

我已经进行了大约 4 个小时的挖掘并尝试了我能找到的每一个建议,所以在你立即称它为重复之前,请先告诉我。

最终,这个问题这个问题完全相同,但接受的答案与我的情况无关,并且 OP 不再是活跃成员。


背景

这个应用程序大约有一百页。它们中的每一个最终都继承自同一个基类。这个基类覆盖了该Init方法并动态地添加一个ScriptManager作为第一个Form控件。

在其中的一个页面上,我遇到了我链接的帖子中描述的问题。我提到接受的答案是相关的。原因如下:

  1. 我不Sys.打电话
  2. 我的页面上没有任何启用 AJAX 的控件
  3. 我的页面上没有任何 JavaScript
  4. 我的 web.config 是准确的,它包含正确的处理程序条目
  5. 该问题在 IIS 6.0 和 IIS 7+ 上都可以重现
  6. 如果我通过显式将 ScriptManager 添加到页面<asp:ScriptManager />,则 ScriptResource.axd 包含仍然不会呈现到输出页面
  7. 我尝试清除浏览器历史记录、临时 ASP.NET 文件、重新启动等,但行为没有改变
  8. 我们 UAT 环境中的旧版本应用程序可以正常运行;从那时起,基本页面代码和 web.config 文件都发生了变化

我完全被难住了。这是一个 ASP.NET 3.5网站项目,在带有 IIS 6.0(Prod 和 UAT)的 Win Server 2003 上运行。我的开发环境是带有 IIS 7.5 的 Win7。两种环境中的行为相同。

问题

有人有什么想法吗?我开始认为这是 ASP.NET 3.5.1 框架中的错误...

4

2 回答 2

1

我刚刚遇到了一个类似的问题,我似乎刚刚解决了。

如果您要覆盖页面上除 PageLoad 之外的任何其他页面生命周期事件,请确保触发事件的基本版本。例如我正在使用OnPreRenderComplete

protected override void OnPreRenderComplete(EventArgs e)
{
    base.OnPreRenderComplete(e); //ADDING THIS LINE FIXED THE PROBLEM

    //Add THEAD etc to Gridview
    if (gvQueue.Rows.Count > 0)
    {
            gvQueue.HeaderRow.TableSection = TableRowSection.TableHeader;
    }
}
于 2012-11-12T04:18:44.503 回答
0

由于您已经尝试了其他所有方法,并且因为它是可重现的,所以我可以想到 3 个可能的原因,您可以检查:

1) 元素定义不正确。

确保已 runat="server"指定 head 元素。我们总是提供一个id,虽然我不认为这是严格要求的:

<head id="HEAD1" runat="server">

2) 导致异常的代码在包含 ScriptResource.axd 之前被执行。

为了验证是否是这种情况,我查看了异常发生时页面中加载的内容。如果我没有看到被报告为丢失的资源,我知道我有订购问题。

我已经看到这是由继承树中的两个 Page.Init (或其他方法)挂钩引起的,当这种情况发生时,您无法保证执行顺序。

3) 无效的页面结构。

我见过很多这样的例子,其中一个放错位置、容易被忽略的字符,例如单引号、双引号或 < 会默默地破坏页面或 javascript 结构。

为了验证不是这样,我首先在设计模式(编辑、高级、验证文档)下验证页面并更正任何错误。

如果设计模式下没有错误,我会通过将渲染页面的源代码复制到项目内的空白页面中然后进行验证来验证渲染页面。这个过程在页面结构中发现了不止一个微妙的问题。

4) 如果以上方法都不能解决问题,则可能是框架存在问题。如果有,则可能是由页面中的元素名称或顺序引起的。您可以尝试删除或重新排序页面中的项目,直到问题消失。

希望这可以帮助。

于 2012-07-14T22:37:11.480 回答