Javascript ASP.net:ClientScript.RegisterClientScriptBlock在加载jQuery之前激发

Javascript ASP.net:ClientScript.RegisterClientScriptBlock在加载jQuery之前激发,javascript,asp.net,jquery,Javascript,Asp.net,Jquery,这里有一个有趣的问题,来自我最近看到的一些继承代码。我正在尝试向项目中添加压缩模块。它加载所有的JS和CSS文件,组合它们,缩小它们,并压缩它们。我尝试了很多解决方案,但都有一个致命的问题 在母版页的预呈现中,我有一些通过Page.ClientScript.RegisterClientScriptBlock加载的javascript。压缩模块正在母版页中作为脚本标记链接加载,但当我运行该页时。。。来自PreRender的代码被剪掉在顶部,并给我一个“$isundefined”错误,告诉我jQue

这里有一个有趣的问题,来自我最近看到的一些继承代码。我正在尝试向项目中添加压缩模块。它加载所有的JS和CSS文件,组合它们,缩小它们,并压缩它们。我尝试了很多解决方案,但都有一个致命的问题

在母版页的预呈现中,我有一些通过Page.ClientScript.RegisterClientScriptBlock加载的javascript。压缩模块正在母版页中作为脚本标记链接加载,但当我运行该页时。。。来自PreRender的代码被剪掉在顶部,并给我一个“$isundefined”错误,告诉我jQuery尚未加载

此外,对于内容页上的内联javascript,我似乎无法克服同样的问题


你知道是什么引起的吗?请告诉我,因为我没有任何线索。

如果最终扩展到jquery的脚本标记链接不在页面的头部,而是在页面的主体中,那么当脚本块执行时,
$
将是未定义的,除非它在呈现的html中打开
标记之前包含在html中,据我所知,
RegisterClientScriptBlock
在其中吐出它的脚本(就在开始标记之后)


如果不是这种情况,并且连接/缩小的脚本在头部,那么我将使用浏览器调试器(如Firebug或IE Dev工具)来验证jquery脚本是否正确地包含在组合脚本中。

所有jquery代码都应写在DOM就绪函数中:

$(function() {
    // your code here
});

独立于您在页面中放置它的位置,因为jQuery()函数以前不可用。

如果您以前使用
RegisterStartupScript
(而不是
RegisterClientScriptBlock
)执行此操作并调用
$(文档)。就绪(函数()
来自该脚本。

我知道这个答案在晚会上迟到了,但请尝试在您的
OnPreRenderComplete
中调用
ClientScript.RegisterClientScriptBlock
(而不是
OnPreRender
)处理程序。这将在页面呈现过程的后面插入代码。

jQuery在DOM完全加载之前无法工作。$(文档)。就绪(函数(){--->抛出一个错误,因为$未定义。可能您正试图压缩jQuery的精简版本?在这种情况下,我认为它可能会产生一些问题…这个答案不太正确。如果jQuery/$函数不可用,
$(function(){});
也不起作用。这个函数只是告诉jQuery在DOM准备就绪时执行内部的内容。但是如果jQuery还不可用,您将得到@jlrolin所说的错误。这并不能解决这个问题。正如其他人所说,问题是通过RegisterClientScriptBlock(使用jQuery)添加的代码在加载jquery之前调用。整洁的解决方案。ToolkitScriptManager也有同样的问题,我最终使用插入的脚本$(文档).blabla;在jquery源文件之前。我相信人们在母版页中使用ScriptManager来包含jquery或整个网站所需的其他脚本,甚至可能使用CombineScripts或ToolkitScriptManager的CompositeScripts。RegisterClientScriptBlock在Sc的ScriptReference之前插入其内容似乎很奇怪riptManager。