如果之前未包含文件,请包含控件中的JavaScript文件

时间:2011-03-30 12:26:58

标签: c# javascript asp.net

我写过一个控件需要运行某些JavaScript文件,比如
jQuery的1.5.1.min.js
jquery.colorbox.js
和另一个自定义文件,我们称之为gallery.js

我正在考虑如何在不同的内容页面上使控件更具可重用性,而无需使用ScriptManagerProxy在pagelevel上加载脚本,这意味着我不需要在每个内容页面上执行此操作:< / p>

<asp:ScriptManagerProxy ID="proxy1" runat="server">
   <Scripts>
     <asp:ScriptReference Path="~/scripts/jquery-1.5.1.min.js" />
     <asp:ScriptReference Path="~/scripts/jquery.colorbox.js" />
     <asp:ScriptReference Path="~/scripts/gallery.js" />
   </Scripts>
</asp:ScriptManagerProxy>

该实施有一个缺点。如果我想在另一个页面上使用该控件,我必须考虑所需的脚本。我宁愿使用一个实现,其中控件本身加载必要的JavaScript文件,而不是一次加载某些脚本。 假设我在同一页面上使用我的控件三次,所以我不想最终加载所有JavaScript文件三次。我该怎么办?

我正在寻找这样的解决方案:

if(Page.Scripts["path to javascript file"] == null)
{
 Page.Scripts.InsertJavaScript("path to javascript file");
}

我如何处理这种情况? (我不想在页面级别或母版页上加载脚本以产生不必要的开销)

3 个答案:

答案 0 :(得分:3)

检查RegisterClientScriptInclude

if (!Page.ClientScript.IsClientScriptIncludeRegistered(typeof(MyControl), "someName")) {
    Page.ClientScript.RegisterClientScriptInclude(typeof(MyControl), "someName", ResolveUrl("./something.js"));
}

答案 1 :(得分:0)

使用带有Type和Key的ClientScript.RegisterXYZ方法。 ASP.Net只会输出一次唯一的脚本。

答案 2 :(得分:0)

我相信你可以这样做:

ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "scriptName", "the script url);

这将只注册一次include脚本。它使用脚本Name来注册它,它不会注册两次。