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

时间:2012-05-28 15:22:29

标签: jquery asp.net user-controls

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

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

<HEAD>
   <SCRIPT type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></SCRIPT>
</HEAD>

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


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

不同的解决方案涉及:

我的困惑集中在:

  • 我想何时使用RegisterClientScriptInclude vs RegisterStartupScript
  • 我想在Page_Load vs Render vs PreRender期间与按钮点击进行调用?
  • 如何向RegisterXxxxScriptXxx提供"Scripts/jquery-1.7.2.min.js"的路径?

简短版:如何转换

<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
    Inherits="_Default" %><!DOCTYPE html>
<html>
<head runat="server">
    <script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>

用于UserControl:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MySuperCoolControl.ascx.cs" Inherits="Controls_MySuperCoolControl" %>

4 个答案:

答案 0 :(得分:3)

您可以按如下方式使用google hosted jquery:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>

答案 1 :(得分:2)

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

请参阅How Do You Use ScriptManagerProxy In a custom ASP.NET Control

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

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

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

答案 2 :(得分:1)

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

看一下这个链接:

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

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

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

答案 3 :(得分:0)

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

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