Asp.Net:用户控件,javascripts和javascript库

时间:2013-12-12 12:14:39

标签: c# javascript jquery html asp.net

我有一个用户控件,每个控件需要Javascript / Jquery。它实际上是一个使用一些javascript库以图形方式表示数据的控件。作为一种规范,我的所有JavaScript链接都位于母版页面的页面底部。这意味着我无法在控件中编写任何javascript,因为它将出现在任何依赖项之前。此外,即使脚本位于页面底部,它也只适用于第一个控件。有没有人遇到类似的挑战?我正在寻找出路。感谢

2 个答案:

答案 0 :(得分:2)

您可以从代码隐藏中注册客户端脚本。

var clientScriptManager = Page.ClientScript;

if(!clientScriptManager.IsStartupScriptRegistered("a_key")) { //If multiple control instances are present on the page, register scripts only once
    RegisterStartupScript(Page.GetType(), "a_key", "<script src=\"/js/a_library.js\"></script>"));
}

RegisterStartupScript会在<script>结束标记之前在页面的最底部添加</body>标记。

答案 1 :(得分:1)

我有一个类似的问题“更新”一个有大量内联JS的遗留站点......所以当我将jQuery和其他脚本移到页面底部时,我也遇到了问题。我通过向母版页添加新的ContentPlaceHolder来解决它,在其他脚本引用下面:

<asp:ContentPlaceHolder ID="ScriptsPlace" runat="server"></asp:ContentPlaceHolder>
</body>

然后遍历这些页面并将所有内联JS移动到ScriptsPlace的内容块中。

<asp:Content ID="Content5" ContentPlaceHolderID="ScriptsPlace" runat="server">
    <script>
      //some awesome JS
    </script>
</asp:Content>

虽然这对用户控件不起作用...所以我做了一个有点hacky的解决方案,主要涉及将所有用户控件JS放入名为div的{​​{1}}然后从代码中-behind 移动将div放入占位符(我不喜欢_jsDiv,这对于很多代码都不实用。)

由于我在多个控件中执行了此操作,因此我执行了以下步骤:

第1步 - 制作自定义用户控件,ScriptMoverUserControl.cs:

RegisterStartupScript

第2步 - 让您的用户控件使用此新控件类: 它将继承public class ScriptMoverUserControl : System.Web.UI.UserControl { protected void Page_PreRender(object sender, EventArgs e) { ContentPlaceHolder c = Page.Master.FindControl("ScriptsPlace") as ContentPlaceHolder; HtmlGenericControl jsDiv = this.FindControl("_jsDiv") as HtmlGenericControl; if (c != null && jsDiv != null) { jsDiv.ID = Guid.NewGuid().ToString(); //change the ID to avoid ID conflicts if more than one control on page is using this. c.Controls.Add(jsDiv); } } } 而不是ScriptMoverUserControl

System.Web.UI.UserControl

第3步 - 将用户控件脚本转储到名为_jsDiv的div中

public partial class SomeGreatControl : ScriptMoverUserControl

这对我来说很好,但如果有人知道更好/更干净的方式,我想知道!