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

时间:2011-01-21 14:55:17

标签: javascript asp.net jquery

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

我有一些javascript正在通过MasterPage的PreRender中的Page.ClientScript.RegisterClientScriptBlock加载。压缩模块在MasterPage中作为脚本标记链接加载,但是当我运行页面时...来自PreRender的代码被顶上并且给我一个'$ is undefined'错误,告诉我jQuery不是装了。

此外,当谈到内容页面上的内联javascript时,我似乎无法解决同样的问题。

有关导致此问题的任何想法?启发我,因为我不知道。

4 个答案:

答案 0 :(得分:9)

如果之前使用RegisterStartupScript(而不是RegisterClientScriptBlock)完成此操作,并从该脚本的WITHIN中调用$(document).ready(function()

答案 1 :(得分:0)

如果最终扩展到jquery的脚本标记链接不在头部,而是在页面正文中,那么当脚本块执行时,$将是未定义的,除非它包含在html中在渲染的html中打开<form />标记之前,我理解的是RegisterClientScriptBlock吐出其脚本的位置(就在开始标记之后)。

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

答案 2 :(得分:0)

所有jQuery代码都应该写在DOM-ready函数中:

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

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

答案 3 :(得分:0)

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