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

Asp.net ';Sys';未定义--呈现的标记缺少对ScriptResource.axd的引用,asp.net,vb.net,iis,asp.net-ajax,scriptmanager,Asp.net,Vb.net,Iis,Asp.net Ajax,Scriptmanager,是的,著名的“Sys”是未定义的Microsoft JS问题 我已经做了大约4个小时的挖掘工作,并尝试了我能找到的关于它的每一个建议,所以在你立即称之为重复之前,请告诉我 最终,这个问题与完全相同,但被接受的答案与我的情况无关,OP不再是一个活跃的成员 背景 这个应用程序大约有一百页。它们中的每一个最终都继承自相同的基类。该基类重写Init方法,并将ScriptManager作为第一个表单控件动态添加到该方法中 在其中的一页上,我遇到了我链接的帖子中描述的问题。我提到被接受的答案是相关的。原因

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

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

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


背景 这个应用程序大约有一百页。它们中的每一个最终都继承自相同的基类。该基类重写
Init
方法,并将
ScriptManager
作为第一个
表单
控件动态添加到该方法中

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

  • 我没有打任何
    Sys.
    电话
  • 我的页面上没有任何支持AJAX的控件
  • 我的页面上没有任何JavaScript
  • My web.config是准确的,它包含正确的处理程序条目
  • 该问题在IIS 6.0和IIS 7上都可以重现+
  • 如果我通过
    将ScriptManager显式添加到页面,ScriptResource.axd include仍然不会呈现到输出页面
  • 我尝试过清除浏览器历史记录、临时ASP.NET文件、重新启动等,但行为没有改变
  • 在我们的UAT环境中,旧版本的应用程序功能正常;此后,基本页代码和web.config文件都发生了更改
  • 我完全被难住了。这是一个ASP.NET 3.5网站项目,运行在Win Server 2003上,带有IIS 6.0(Prod和UAT)。我的开发人员环境是带有IIS 7.5的Win7。两种环境中的行为相同

    问题:
    有人有什么想法吗?我开始认为这是ASP.NET 3.5.1框架中的一个bug…

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

    1) 未正确定义元素

    确保指定了head元素
    runat=“server”
    。我们也总是提供
    id
    ,尽管我认为这不是严格要求的:

    <head id="HEAD1" runat="server">
    
    
    
    2) 导致异常的代码是在包含ScriptResource.axd之前执行的

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

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

    3) 无效的页面结构

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

    为了验证情况并非如此,我首先在设计模式下验证页面(编辑、高级、验证文档)并更正所有错误

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

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


    希望这能有所帮助。

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

    如果要覆盖页面上除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;
        }
    }
    

    看起来像是这个或@HatSoft:的复制品,除了我的web.config中没有遗漏任何内容。你是否也检查了这个@HatSoft:是的,这是我在帖子中已经链接到的。在这种情况下,Sys。在scriptManager加载之前调用。你能在呈现页面上看到调用sys的是什么吗?