12

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

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

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

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


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

不同的解决方案涉及调用:

我的困惑集中在:

  • 我什么时候想使用RegisterClientScriptIncludevs RegisterStartupScript
  • 我什么时候想在Page_Loadvs Rendervs PreRendervs 按钮点击期间调用它?
  • 我如何给出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>

用于用户控件:

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

4 回答 4

3

您可以使用 google 托管的 jquery,如下所示:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
于 2012-06-10T10:55:50.573 回答
2

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

查看如何在自定义 ASP.NET 控件中使用 ScriptManagerProxy

这将负责“为 RegisterXxxxScriptXxx 提供“Scripts/jquery-1.7.2.min.js”的路径,并消除在 Page_Load/Page_PreRender 事件期间担心它的需要。

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

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

于 2012-05-31T10:48:25.557 回答
1

[这仅在您的用户控件要在内部使用时才相关。如果它是为了分发,那么它不会有太大帮助]

看看这个链接:

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

这篇文章建议创建方法来生成对 jQuery 等 javascript 库的引用,这样如果您想在页面中使用它,您只需调用 JavascriptLoader.IncludeJQuery() [或任何您调用的方法]。

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

于 2012-05-29T16:01:08.110 回答
0

如果您的控件是从单独的项目中引用的,则可以将 javascript 嵌入到其他程序集中。请参阅 Scott Mitchell 的这个古老但很好的例子:

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

于 2012-06-28T10:44:27.597 回答