如何在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
vsRegisterStartupScript
? - 我什么时候想在
Page_Load
vsRender
vsPreRender
与按钮点击时调用它? - 我如何给
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嵌入到另一个程序集中。 看看斯科特·米切尔这个古老而又好的例子: