2

隱藏我有一個自定義控制未加載腳本,這完全依賴於jQuery插件。一切正常,因爲它應該是,但問題出現時控制設置可見= false或其父母的任何不可見。理想情況下,當asp.net控件設置爲可見時,引擎不會渲染它,所以我的控件不會在頁面加載時呈現。並且,當控件不渲染時,它不會加載JavaScript資源,因此當控件在回發中顯示時,jquery插件不會綁定。這是一個非常基本的問題,作爲開發人員,應該使用它,他們只是將控件拖放到他們的頁面上,假設它完美地工作。我認爲必須有一個解決方法。以下粘貼是我如何加載資源。自定義控制:當控制在頁面加載

ClientScriptManager cs = this.Page.ClientScript; 

#region Loading JavaScript File(s) 
string MenuPlugin = "MainMenuControl.Scripts.javascript_main.js"; 
cs.RegisterClientScriptResource(typeof(MainMenuControl.MenuControl), MenuPlugin); 
string MenuInitializer = "MainMenuControl.Scripts.BuildMenu.js"; 
cs.RegisterClientScriptResource(typeof(MainMenuControl.MenuControl), MenuInitializer); 
#endregion 

#region Loading CSS File(s) 
string cssUrl = Page.ClientScript.GetWebResourceUrl(this.GetType(), "MainMenuControl.Styles.MenuStyle.css"); 
HtmlLink cssLink = new HtmlLink(); 
cssLink.Href = cssUrl; 
cssLink.Attributes.Add("rel", "stylesheet"); 
cssLink.Attributes.Add("type", "text/css"); 
this.Page.Header.Controls.Add(cssLink); 
#endregion 

#region Loading Image(s) 
Page.ClientScript.GetWebResourceUrl(typeof(MainMenuControl.MenuControl), "MainMenuControl.Images.down.gif"); 
string script = string.Format(@"initializeMenu('{0}');", Page.ClientScript.GetWebResourceUrl(typeof(MainMenuControl.MenuControl), "MainMenuControl.Images.down.gif")); 
Page.ClientScript.RegisterStartupScript(Page.GetType(), "InitImage", script, true); 
#endregion 

在代碼的第三行中,我正在調用帶有正確加載的圖像url的函數。但出於某種原因,JavaScript文件並沒有被加載,也沒有任何瀏覽器在加載的資源列表中顯示它們。

是否有任何解決問題的辦法,或者是有什麼我做錯了嗎?我現在對這個問題真的很無奈,希望得到任何幫助。

回答

1

我有一個非常類似的問題早,在你的問題就來了。

我被重寫OnPreRender方法加載JavaScript爲我的自定義控件。

protected override void OnPreRender(EventArgs e) { 
     base.OnPreRender(e); 
     Page.ClientScript.RegisterClientScriptInclude("MyJavascript", "MyURL"); 
    } 

這用在正常的頁面環境的控制,當工作過,但在這種情況下,我是用它的更新面板內,起初隱藏它。然後,更新面板中的Ajax回發將更新Visible屬性爲true。當然,ASP.NET沒有機會自動將客戶端腳本注入頁面的<head>

解決方案

而不是壓倒一切的OnPreRender可以覆蓋OnInit(應該始終觸發即使控制是隱藏的),在這一點上,你可以添加一個事件處理任何Page事件。這使得你可以自由添加OnPreRender方法將總是執行作爲Page生命週期的一部分。

protected override void OnInit(EventArgs e) { 
     base.OnInit(e); 

     Page.PreRender += new EventHandler(Page_PreRender); 
    } 

    protected void Page_PreRender(object sender, EventArgs e) { 
     Page.ClientScript.RegisterClientScriptInclude("MyJavascript", "MyURL"); 
    } 
+0

非常感謝您的回答。這個問題還沒有解決,今天有一段時間會嘗試。 –