iT邦幫忙

6

ASP.Net 之 可愛又可恨的SCriptManager...

常常,自己製作UserControl的時候,都要考慮,到底要不要用UpdatePanel...
非同步更新嘛...炫!!
但是...問題來了...
一個webform裡頭,只能有一個ScriptManager...
usercontrol裡頭放了...怕跟其他usercontrol、masterpage甚至page本身的scriptmanager衝突...
不放嘛...只好燒香拜佛,用的人自己會放吧...
這...出問題,還是找寫元件的人啊..不好不好!!
撰寫ASP.Net WebForm Application的時候,或多或少都要自己來自訂幾個UserControl,
這樣才顯得自己是高手高高手嘛...(大誤)
製作UserControl的時候,拜託...都web 2.0的時代了,肯定要來給他ajax一下...ScriptManager+UpdatePanel絕對是基本配備...非同步更新嘛...炫咩!!
但是...問題來了...
一個webform裡頭,只能有一個ScriptManager...
usercontrol裡頭放了...怕跟其他usercontrol、masterpage甚至page本身的scriptmanager衝突...
不放嘛...只好燒香拜佛,用的人自己會放吧...
這...出問題,還是找寫元件的人啊..不好不好!!
ASP.Net WebForm上頭,只能存在一個ScriptManager....
如果,自己在usercontrol上加上scriptmanager...
那...如果使用元件的人,自己再加一個...出事...
如果不加,使用的人也忘記加...那還是...出事
ASP.Net UserControl 如何使用UpdatePanel,又不需要擔心使用元件的人有沒有加入ScriptManager的方法
很簡單...
在你的UserControl上,UpdatePanel前,加上一個placeholder
然後,在你的updatepanel的init事件上,這麼寫...

if(ScriptManager.GetCurrent(this.Page) == null)
{
  placeholder.Controls.Add(new ScriptManager());
}

2 則留言

0
海綿寶寶
iT邦大神 1 級 ‧ 2013-09-14 09:33:40

不懂純推
讚

請教一下
這個 placeholder 是「整個 form」共用的嗎?
謝謝

外獅佬 iT邦大師 1 級 ‧ 2013-09-15 09:25:32 檢舉

不是...asp.net裡頭有個名為placeholder元件,可以在執行時期利用程式加入各式各樣的元件。
它跟panel不一樣的是,它自己本身不會產生html標籤,不會破壞整個網頁編排的版面。
加入placeholder的目的,是在偵測scriptmanager不存在的時候,還有機會自己把scriptmanager加上去,防止usercontrol因為缺少了scriptmanager就這麼死翹翹了。

今天又學到一點,賺到了
謝謝

0
player
iT邦大師 1 級 ‧ 2013-09-14 17:57:02

ScriptManager建議放在主版頁面裡
以確保唯一性
不過, 我都用AJAX Control Toolkit 的 ToolkitScriptManager

外獅佬 iT邦大師 1 級 ‧ 2013-09-15 09:21:12 檢舉

一般來說是這樣沒錯,不過總是要防呆
而且,寫UserControl給其他人使用,還要求一定要先放什麼元件,其實沒什麼道理。開心

player iT邦大師 1 級 ‧ 2013-09-16 00:38:14 檢舉

不論是ScriptManager還是 ToolkitScriptManager
在ASP.NET早期的版本都不是預設的控制項啊
你如果寫在UserControl裡
如果他在同一個頁面的其他UserControl裡
也用的話
就會衝突了

外獅佬 iT邦大師 1 級 ‧ 2013-09-17 00:21:11 檢舉

所以……需要偵測啦暈

我要留言

立即登入留言