'Sys'未定义 - 呈现的标记缺少对ScriptResource.axd的引用

时间:2012-07-14 19:16:50

标签: asp.net vb.net iis asp.net-ajax scriptmanager

是的,着名的“'系统'未定义”微软JS问题。

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

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


背景

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

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

  1. 我没有进行任何Sys.来电
  2. 我的页面上没有任何支持AJAX的控件
  3. 我的页面上没有任何JavaScript
  4. 我的web.config准确无误,它包含正确的处理程序条目
  5. 该问题在IIS 6.0和IIS 7 +
  6. 上都是可重现的
  7. 如果我通过<asp:ScriptManager />向页面显式添加ScriptManager,则ScriptResource.axd包含仍未呈现到输出页面
  8. 我已尝试清除浏览器历史记录,临时ASP.NET文件,重新启动等,但行为没有变化
  9. 我们的UAT环境中的旧版应用程序正常运行;从那时起,基页代码和web.config文件都发生了变化
  10. 我完全难过了。它是在带有IIS 6.0的Win Server 2003(Prod和UAT)上运行的ASP.NET 3.5 Web 站点项目。我的开发人员环境是带有IIS 7.5的Win7。两种环境都有相同的行为。

    问题

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

2 个答案:

答案 0 :(得分:1)

我刚刚遇到了类似的问题,我似乎已经解决了。

IF 您将覆盖除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;
    }
}

答案 1 :(得分:0)

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

1)元素未正确定义。

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

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

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

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

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

3)页面结构无效。

我见过很多错位,容易被忽视的字符,例如单引号,双引号或&lt;默默地破坏页面或javascript结构。

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

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

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

希望这有帮助。