如何在ASP.net页面中包含jQuery?

我有一个ASP.net UserControl ,要求包含页面包含对jquery的引用。

在过去,我只是在包含页面中包含对jQuery的引用:

    

但是我的UserControl对jQuery的依赖是一个内部实现细节,不应泄漏到外部。 我的userControl如何指示jQuery包含在最终页面中?


研究这个,我发现很多困惑的解决方案,在不同的时间调用不同的function。 我不愿意提及它们中的任何一个,因为人们可能认为它们中的任何一个都是有效的。 我希望得到正确的答案,而不是一个有效的答案。

不同的解决方案涉及:

  • Render期间调用this.Page.ClientScript.RegisterClientScriptInclude
  • Render期间调用this.Page.ClientScript.RegisterStartupScript
  • Page_Load期间调用this.Page.ClientScript.RegisterStartupScript
  • 在单击按钮期间调用this.Page.ClientScript.RegisterStartupScript
  • 调用Page.Header.Controls.Add(new LiteralControl( { Text = "";);
  • 只需在userControl.ascx文件中包含元素即可
  • OnPreRender期间调用RegisterClientScriptBlock

我的困惑集中在:

  • 我什么时候想使用RegisterClientScriptInclude vs RegisterStartupScript
  • 我什么时候想在Page_Load vs Render vs PreRender与按钮点击时调用它?
  • 我如何给RegisterXxxxScriptXxx提供"Scripts/jquery-1.7.2.min.js"的路径?

简短版:我如何转换

     

用于UserControl:

  

您可以使用google hosted jquery,如下所示:

  

您可以在UserControl上使用ScriptManager ,在父页面或母版页上使用ScriptManagerProxy

请参见如何在自定义ASP.NET控件中使用ScriptManagerProxy

这将照顾“为RegisterXxxxScriptXxx提供”Scripts / jquery-1.7.2.min.js的路径“,并且无需在Page_Load / Page_PreRender事件期间担心它。

至于“我什么时候想使用RegisterClientScriptInclude vs RegisterStartupScript?”

RegisterClientScriptInclude注册要包含在页面中的外部JS文件。 RegisterStartupScript在页面中包含一个内联可执行脚本块,该脚本不在外部文件中。

[这仅在您的用户控件将在内部使用时才有意义。 如果它是分发那么它将没有多大帮助]

看看这个链接:

http://www.codeproject.com/Articles/196727/Managing-Your-JavaScript-Library-in-ASP-NET

本文建议创建生成javascript库引用的方法,例如jQuery,这样如果你想在页面中使用它,你只需调用JavascriptLoader.IncludeJQuery()[或任何你称之为你的方法]。

现在我所做的是通过在我放置在GAC中的程序集中创建这些方法,使其可用于我的所有.net Web应用程序,更进一步。 现在,无论我想在哪里使用jQuery,该方法已经可用。 最好的事情是,如果我在用户控件中调用该方法,并在另一个用户控件中再次调用它,并再次在页面上,它仍然只注册一次库。 如果我决定升级到更新版本的jQuery,我只需更改我的dll,它随处可见。

如果您的控件是从单独的项目引用的,则可以将javascript嵌入到另一个程序集中。 看看斯科特·米切尔这个古老而又好的例子:

http://www.4guysfromrolla.com/articles/080906-1.aspx