簡體   English   中英

在ASP.net頁面加載時以編程方式運行javascript的最佳方法是什么?

[英]What is the best way to programmatically run javascript when an ASP.net page loads?

在我的ASP.net項目的global.asax文件中,我正在檢查某些條件。 當滿足這些條件時,我想在頁面運行時自動執行javascript代碼。

這是我的代碼:

如果條件然后
Response.Write(“<script type =”“text / javascript”“>”)
Response.Write(“// Javascript代碼做東西”)
Response.Write(“</ script>”)
萬一

雖然這似乎有助於執行Javascript代碼,但我認為這不是最佳實踐,因為此代碼將在加載的頁面的所有 HTML之前。

在我的頁面加載時,以編程方式添加一些額外的Javascript代碼的最佳方法是什么?

更新感謝您的回答。 太糟糕了,這個解決方案在global.asax不起作用。 有沒有辦法在整個網站范圍內實現這一目標? 似乎global.asax是放置與每個頁面一起運行的代碼的合理位置...... Response.Writeglobal.asax工作正常。

要從服務器控件或頁面正確管理腳本的放置,您應該使用ClientScriptManager.RegisterStartupScript()

如果在站點中使用ajax控件,也可以在ScriptManager中使用等效方法: ScriptManager.RegisterStartupScript

這些方法負責在文檔加載完成后在適當的位置輸出腳本。 發布的鏈接有一些很好的例子可供使用。

請注意,您將無法直接從global.asax使用這些方法,因為它沒有引用當前頁面。 Global.asax用於將事件掛鈎到HttpApplication管道,並且與實際的HttpHandler(例如Page對象)分離。 為了保持UI的分離,最好在主頁或某些基頁類中進行檢查,然后從那里輸出腳本。

回到asp.net ajax 1.0的時代,我們在ajax客戶端庫中有一個名為Sys.WebForms.PageRequestManager的東西。 沒有使用過asp.net 3.5和asp.net ajax,但我確信它足以將asp.net ajax javascript文件添加到你的頁面中,你就可以使用它了。 檢查一個名為pageLoaded事件的事件。

ps:每次有同步或異步回發時,都會觸發此事件

如果您想在每個頁面上執行此操作,請將其放在主頁上(如果有的話)。

如果沒有,您可以創建一個基頁面類,它繼承自System.Web.UI.Page並擴展它以檢查您的條件並呈現javascript。

然后在每個頁面的代碼隱藏中,繼承您的基本頁面類而不是System.Web.UI.Page

public partial class Orders : MyCode.BasePage

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM