我有一個用戶控件,它需要每個控件的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 –