我有一个用户控件,它需要每个控件的Javascript/jquery。它实际上是一个用图形表示使用一些JavaScript库的数据的控件。作为规范,我的所有javascript链接都位于主页面的页面底部。这意味着我不能在控件中编写任何JavaScript,因为它会出现在它的任何依赖关系之前。另外,即使脚本位于页面的底部,它也只适用于第一个控件。有没有人遇到类似的挑战?我正在寻找出路。谢谢Asp.Net:用户控件,JavaScript和JavaScript库
回答
我有一个类似的问题,“更新”一个有大量内联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>
尽管这不会对用户控件工作...所以我做了,基本上涉及到把所有的用户控件JS的成div
名为_jsDiv
,然后从后台代码移动有点哈克解决方案将div放入占位符中(我不喜欢RegisterStartupScript
,它对于很多代码都不实用)。
因为我这样做在多个控件,我做了这些步骤:
步骤1 - 制作一个自定义用户控件,ScriptMoverUserControl.cs:
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);
}
}
}
第2步 - 使您的用户控制使用这个新的控制类: 它将继承ScriptMoverUserControl
而不是System.Web.UI.UserControl
public partial class SomeGreatControl : ScriptMoverUserControl
第3步 - 转储用户控制脚本在名为_jsDiv DIV:
<div id="_jsDiv" runat="server">
<script>
//some awesome JS
</script>
</div>
它一直致力于为我好,但如果有人知道更好的/干净的方式,我想知道!
...是的,我知道更好/更清洁的方式将是将所有的内联JS删除到实际的脚本文件中,并使用'RegisterStartupScript' ...但是JS中的代码块和JS的数量一样,只需要更快地采用这种方法。 – MikeSmithDev
我会立即尝试。我还没有解决这个问题。 – Remade
@RemiAdeoye第一步是创建用户控件类 - 'ScriptMoverUserControl.cs'。第2步是定期进行用户控制,然后替换System.Web.UI。UserControl'在顶部带有'ScriptMoverUserControl'。然后,您在用户控件中放入'_jsDiv'的任何脚本都将被移动到'ScriptsPlace'内容占位符中,该占位符应该位于母版页中的所有脚本引用之下。 – MikeSmithDev
您可以从代码隐藏注册客户端脚本。
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. Javascript未被ASP.NET用户控件调用
- 2. ASP.NET Webforms,用户控件中的JavaScript
- 3. asp.net webforms注册用户控件的JavaScript
- 4. 链接用户控件中的JavaScript库
- 5. 用户控件和JavaScript和母版页
- 6. 使用Javascript与ASP.Net控件
- 7. ASP.NET用户控件和从Javascript访问属性?
- 8. C#中的Javascript和用户控件#
- 9. 用户控件和asp.net mvc
- 10. JavaScript Asp.net重复控件
- 11. 如何refrence JavaScript文件到用户控件在asp.net
- 12. 在ASP.NET用户控件中提高javascript事件
- 13. 使用JavaScript和CustomValidator控件验证客户端的asp:CheckBox控件
- 14. 在使用asp.net用户控件时,我在哪里放置JavaScript?
- 15. 如何调用asp.net用户控件的javascript函数
- 16. ASP.net用户控件不调用JavaScript函数
- 17. ASP.NET用于JavaScript功能的用户控件范围
- 18. JavaScript方法在ASP.NET用户控件中不起作用
- 19. 如何使用javascript禁用客户端的asp.net控件
- 20. 在Master网页中包含Javascript和css和在asp.net中的用户控件
- 21. 在ASP.Net中,我可以使用Javascript和PageMethods调用用户控件WebMethod?
- 22. 用于ASP.NET的JavaScript UI控件
- 23. 如何使用javascript与asp.net dropdownlist控件?
- 24. ASP.Net验证GridView控件使用JavaScript
- 25. 如何使用Javascript克隆ASP.NET控件
- 26. 如何在Javascript中引用ASP.NET控件?
- 27. 用javascript动态加载asp.net控件
- 28. 在ASP.NET中使用javascript复合控件
- 29. 使用javascript加载值到asp.net控件
- 30. 如何从asp.net调用javascript HyperLink控件
您可能需要添加更多具体细节,否则它看起来有现有的答案。 http://stackoverflow.com/questions/1703601/where-do-i-put-javascript-when-using-an-asp-net-user-control –