在自定义服务器控件中嵌入javascript资源

时间:2011-07-14 16:16:52

标签: javascript jquery asp.net embedded-resource servercontrols

我正在基于我在网上找到的jQuery增强文本框创建我的第一个ASP.NET服务器控件。部分原始代码包含一个jQuery扩展文件,因此我需要将其包含在我的控件中。 (基本jQuery库是Web应用程序的一项要求,因此出于我们的目的,我们可以放心地假设它已经在任何使用该控件的页面上可用。)

我首先将javascript文件添加为资源,并且能够在控件的Render事件中编写流。虽然它根据需要创建了HTML / javascript,但jQuery并不能正常工作。

我遇到的第二个问题是我预计会在任何给定页面上使用控件的几个实例,因此即使上述方法有效,javascript也会不断重复。呸。

如何将这个javascript包含在我的控件中,但确保只呈现一次迭代?谷歌搜索已经找到了一些使用[assembly]属性和Page.RegisterClientScriptResource的参考,但我对此并不太清楚。

2 个答案:

答案 0 :(得分:0)

一个想法是将其嵌入页面中,然后将其作为:

const string JAVASCRIPT_RESOURCE = "[namespace].[class].customJS.js"
Stream st = Assembly.GetExecutingAssembly().GetManifestResourceStream(JAVASCRIPT_RESOURCE);
StreamReader sr = new StreamReader( st );
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), 
                                             "customJS", sr.ReadToEnd(), true);

另一种是添加cache-control指令。这将导致浏览器从其本地缓存中加载它以用于后续请求。 WebResources cache指令在发布模式debug=false中生成时会发出{{1}}个指令。

答案 1 :(得分:0)

Page.ClientScript.RegisterClientScriptResource(getType(page), _
   page.ResolveUrl("~/scripts/jquery.js")

RegisterClientScriptResource的整个要点是防止页面重新加载重复的脚本。

请注意,上面的示例假设您正在使用Intranet。如果您正在使用公共网站,最好使用CDN托管文件(http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js)