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

Embed javascript resource in custom server control

本文关键字:javascript 资源 自定义 服务器控件      更新时间:2023-09-26

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

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

我的第二个问题是,我预计在任何给定的页面上使用的控件的几个实例,所以即使上面的方法工作,javascript将不断重复。恶心。

我怎么能包括这个javascript与我的控制,但确保只有一个迭代它被渲染?谷歌已经找到了一些参考使用作为[assembly]属性和Page.RegisterClientScriptResource,但我不太清楚。

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

RegisterClientScriptResource的全部意义在于防止页面重新加载重复的脚本。

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

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

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 .