2013-07-30 106 views
0

我的項目本質上是一個帶有菜單和更新面板的網頁。用戶從菜單中選擇一個選項,並將一個usercontrol加載到updatepanel中。我不想使用更新面板,但是,有多個數據綁定控件包含將更改另一個數據綁定控件內容的信息。不管怎麼說,我的項目需要一個消息框出現在屏幕上,我沒有問題得到工作:ScriptManager.RegisterStartupScript在按鈕上單擊(在updatepanel內)不會觸發第一次點擊

string s= "<script>alert('HayGuise');</script>"; 
ScriptManager.RegisterClientScriptBlock(c.Page, c.Page.GetType(), GUID.NewGUID().ToString(),s,false); 

現在,我已經嘗試了一些不同的戰術,包括與靜態替換GUID串;我已經使用了RegisterStartupScript等。我的問題是消息框不顯示在通話按鈕的第一次點擊之後,updatepanel已經更新以顯示新的usercontrol。但是,如果我再次點擊按鈕,一切都很好。如果這是在加載到updatepanel的第一個表單上(打開網站並從菜單中選擇)完成的,則一切正常;只有當updatepanel以新的形式再次更新時,纔會發生這種情況,並且只有在第一次點擊時纔會發生。

此外,代碼被觸發,所有跟在ScriptManager代碼後面的代碼都會觸發,但消息框將不會顯示,直到再次單擊該按鈕。由於此刻我正在測試此行爲,因此我已將彈出代碼添加到表單上的每個按鈕,並且每個按鈕的行爲都相同。它認爲它花了很長時間來實現一段可靠的代碼(用於消息框)只有這個輕微的問題,這是在我弄清楚爲什麼我的按鈕事件通過一次點擊觸發兩次。我非常確定這將會是一件簡單的事情,某種我不熟悉的屬性需要正確設置。該死的,我希望能夠解決所有這些小問題,以便我可以繼續進行其餘的項目。 Sooooo關閉。感謝您的任何幫助。

編輯:另外,這些按鈕位於另一個用戶控件中,該用戶控件添加到updatepanel中顯示的usercontrol窗體中。

編輯二: 感謝您的意見,我很抱歉回到這麼晚,我轉移到項目的其他部分,並剛剛回來。問題不在於startupscript方法,也不在於clientscriptblck方法;問題在於postback丟失value/viewstate/clientid。

當時我發佈了這個問題,這個項目是一個單頁面應用程序。我通過創建一個多頁面應用程序來測試功能,並且從那裏繼續前進,發誓回到這個問題。那麼,我回來了,問題不在更新面板中,它與我的代碼有關,因爲我清除了更新面板(也嘗試使用常規面板),然後重新加載新的usercontrol。一旦被清除,某些事情就會失控,第一次回傳就沒有任何事情發生。它的一個奇怪的問題,我還沒有找到很多(一些文章)的信息是特定於第一次回發導致此問題。如果我找到答案,我會更新答案;我發現的唯一修復方法是在菜單選擇代碼Server.Transfer(thecurrentpage)中添加一行,實質上刷新頁面。這解決了所有的問題,但它看起來有點不好。再次感謝您的輸入。

+0

所有瀏覽器都有相同的問題?確切地說,當你調用ScriptManager.RegisterClientScriptBlock(..)? –

+0

在IE8和Firefox上測試,同樣的問題。它調用了一個按鈕單擊,它在DisplayMessage(Control c,string message)中,並且它只有上面的兩行代碼(而不是'HayGuise',它會是「+ message +」)。 – fafafooey

+0

如果將斷點放在這種方法的第一種方法,它是在第一次射擊?否則,我認爲你的問題在頁面上的其他地方,你輸入的代碼是正確的(我也使用它)。無論如何,可能會發布更多的代碼? 例如:完整方法,更新面板的開始標記等。 –

回答

0

如果您使用的是AJAX UpdatePanel,那麼下面的代碼應該適合您。在我的情況下,我正在使用更新面板,除了這個之外,沒有任何工作。

ScriptManager.RegisterStartupScript(myUpdatePanelID, myUpdatePanelID.GetType(), "myFunction", "myFunction();", true); 
0

如果您在頁面中使用更新面板,那麼下面的代碼應該適合您。您應該在整個頁面中使用RegisterStartupScript,使用「this」ScriptManager.RegisterStartupScript(this, this.GetType(), "myFunction", "myFunction();", true);

相關問題