成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET控件開(kāi)發(fā)之UpdatePanel觸發(fā)JavaScript腳本技巧

開(kāi)發(fā) 后端
ASP.NET控件開(kāi)發(fā)之UpdatePanel觸發(fā)JavaScript腳本技巧向你介紹了在實(shí)際的開(kāi)發(fā)中所涉及的UpdatePanel腳本應(yīng)用。

ASP.NET控件開(kāi)發(fā)之UpdatePanel觸發(fā)JavaScript腳本的實(shí)現(xiàn)相信很多人都已經(jīng)遇到這個(gè)問(wèn)題了.這個(gè)本身不奇怪.下面我們來(lái)具體討論此問(wèn)題.

UpdatePanel觸發(fā)JavaScript腳本的實(shí)現(xiàn)一.預(yù)呈現(xiàn)數(shù)據(jù)無(wú)法更改

1.大家知道,預(yù)呈現(xiàn)的數(shù)據(jù)是無(wú)法更改的,以前可能提到過(guò),這里再看demo,自定義一個(gè)控件

  1. [DefaultProperty("Text")]  
  2.    [ToolboxData("<{0}:JsControl runat=server>{0}:JsControl>")]  
  3.    public class JsControl : WebControl  
  4.    {  
  5.        [Bindable(true)]  
  6.        [Category("Appearance")]  
  7.        [DefaultValue("")]  
  8.        [Localizable(true)]  
  9.        public string Text  
  10.        {  
  11.            get  
  12.            {  
  13.                String s = (String)ViewState["Text"];  
  14.                return ((s == null) ? String.Empty : s);  
  15.            }  
  16.  
  17.            set  
  18.            {  
  19.                ViewState["Text"] = value;  
  20.            }  
  21.        }  
  22.  
  23.        protected override void OnPreRender(EventArgs e)  
  24.        {  
  25.            Text = "hello,you can't change me";  
  26.            base.OnPreRender(e);  
  27.        }  
  28.  
  29.        protected override void RenderContents(HtmlTextWriter output)  
  30.        {  
  31.            output.Write(Text);  
  32.        }  
  33.    } 

aspx頁(yè)面

  1. protected void Button1_Click(object sender, EventArgs e)  
  2. {  
  3.     JsControl1.Text = "I want to change the Text property";  

你會(huì)發(fā)現(xiàn)你并未更改屬性.這牽涉到控件生命周期的執(zhí)行.為什么要說(shuō)這個(gè),因?yàn)榭丶拇蟛糠帜_本都是在預(yù)呈現(xiàn)中注冊(cè)的. 

這有什么問(wèn)題嗎? 其本身想法很好,腳本在此事件(指OnPreRender)中注冊(cè),注冊(cè)腳本資源在前(控件夾中間),腳本初始化在***.這符合javascript的使用原則,先導(dǎo)入腳本,然后有標(biāo)簽,初始化的腳本須放在標(biāo)簽后面.

UpdatePanel觸發(fā)JavaScript腳本的實(shí)現(xiàn)二.UpdatePanel引起的問(wèn)題

上面的問(wèn)題如果是服務(wù)器提交回傳的則可行,主要問(wèn)題是我們要用ajax無(wú)刷新注冊(cè)腳本.以下我們?cè)賮?lái)看asp.net2.0內(nèi)置的treeview控件,拖個(gè)控件要頁(yè)面看其生成的html代碼,如下圖

treeview控件生成的html代碼 

圖一

你已經(jīng)看到很多的腳本注冊(cè)和初始化了.

我們來(lái)測(cè)試下UpdatePanel能干什么事情,我們?cè)O(shè)置其屬性Visible為False到True

借助FireBug的威力我們來(lái)看下UpdatePanel在無(wú)刷新?tīng)顟B(tài)下返回給了我們什么

UpdatePanel在無(wú)刷新?tīng)顟B(tài)下的返回 

圖二

下面再點(diǎn)下節(jié)點(diǎn),如下圖

點(diǎn)節(jié)點(diǎn)后 

圖三

出錯(cuò)了,大家可能也遇到過(guò)此情況,很正常嘛,UpdatePanel沒(méi)有為我們注冊(cè)腳本也沒(méi)未我們初始化,在屬于正常現(xiàn)象,UpdatePanel只管其容器里面的,其他的不歸它管.

UpdatePanel觸發(fā)JavaScript腳本的實(shí)現(xiàn)三.解決方法

要解決TreeView控件,我是想不出來(lái),這個(gè)控件算是在asp.net ajax模式下算是完蛋了.為了迎合asp.net ajax框架的運(yùn)用,我們需要知道UpdatePanel無(wú)刷新更新范圍,當(dāng)我們自己定義控件的時(shí)候就需要注意.

1.控件本身標(biāo)簽

2.控件內(nèi)部

3.UpdatePanel容器內(nèi)部

若想使用UpdatePanel更新數(shù)據(jù)后再觸發(fā)客戶(hù)端事件的,有以下方案

1.通過(guò)更改現(xiàn)有控件屬性,如

  1. Button1.Attributes["onmouseover"] = "alert('hello')"

2.在呈現(xiàn)過(guò)程中腳本初始化

***種方法簡(jiǎn)單運(yùn)用還可以,復(fù)雜就不行了,我們還是需要把腳本封裝好跟控件結(jié)合使用的,我們不再在預(yù)呈現(xiàn)中注冊(cè)腳本,而在呈現(xiàn)中實(shí)現(xiàn)(即RederContent方法).
我們只要保證腳本資源在前,初始化在后,控件在中間這一原則就可以了...以下方法是可行的

如下

  1. protected override void RenderContents(HtmlTextWriter output)  
  2. {  
  3.     output.Write("");  
  4.     output.Write(Text);  
  5.     output.Write("");  

UpdatePanel觸發(fā)JavaScript腳本的實(shí)現(xiàn)四.幾個(gè)誤區(qū)

1.驗(yàn)證控件在ajax框架中可以完好使用,其實(shí)是其加載了一段腳本,不然其也會(huì)掛掉

2.狀態(tài)保留,在UpdatePanel中更新數(shù)據(jù)后,再Postback,無(wú)刷新更新的數(shù)據(jù)狀態(tài)還保留

3.更新數(shù)據(jù)后執(zhí)行客戶(hù)端腳本

曾經(jīng)我們天真的會(huì)這么寫(xiě)

  1. protected void Button1_Click(object sender, EventArgs e)  
  2. {  
  3.     Label1.Text = "alert('hello')";  

結(jié)果什么也沒(méi)發(fā)生,window.onload事件已過(guò),除非你刷新(可你不想刷新),不然沒(méi)人幫你觸發(fā)。
誰(shuí)來(lái)觸發(fā)?微軟幫我們準(zhǔn)備好了。你要的大概就是這個(gè)了,數(shù)據(jù)更新前后都是一個(gè)事件觸發(fā)。我們可以圍繞著這兩個(gè)事件為控件做點(diǎn)事情。這個(gè)狀態(tài)適合于數(shù)據(jù)取到后就立馬觸發(fā)的需要。

  1. Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);  
  2.                Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);  
  3.                function BeginRequestHandler(sender, args)  
  4.                {  
  5.                     var elem = args.get_postBackElement();  
  6.                     ActivateAlertDiv('visible''AlertDiv', elem.value + ' processing');  
  7.                }  
  8.                function EndRequestHandler(sender, args)  
  9.                {  
  10.                     ActivateAlertDiv('hidden''AlertDiv''');  
  11.                }  
  12.                function ActivateAlertDiv(visstring, elem, msg)  
  13.                {  
  14.                     var adiv = $get(elem);  
  15.                     adiv.style.visibility = visstring;  
  16.                     adiv.innerHTML = msg;                       
  17.                } 

其他的話我們也可以更改控件屬性,就如加個(gè)onclick事件什么的都可以

五.另類(lèi)解決方法

此方法比較的絕,但用起來(lái)比較的爽。UpdatePanel之所以無(wú)法獲取到腳本數(shù)據(jù),是因?yàn)槠浍@取范圍還不夠。。。接著的想法是:

照樣無(wú)刷新取數(shù)據(jù),但取回來(lái)的數(shù)據(jù)跟Postback回來(lái)的數(shù)據(jù)一樣。可能有人說(shuō)會(huì)比較耗性能,那都是相對(duì)的。不過(guò)也是一個(gè)很好的想法。Telerik公司的RadAjaxPanel就是這么實(shí)現(xiàn)的,有興趣的可以下載一個(gè)用用.

漏掉的請(qǐng)大家繼續(xù)補(bǔ)充,這個(gè)問(wèn)題比較的普遍,希望對(duì)大家有幫助。

ASP.NET控件開(kāi)發(fā)之UpdatePanel觸發(fā)JavaScript腳本的內(nèi)容就向大家介紹到這里,希望對(duì)你有所幫助。

【編輯推薦】

  1. ASP.NET優(yōu)點(diǎn)淺析
  2. ASP.NET組件設(shè)計(jì)淺析
  3. ASP.NET組件設(shè)計(jì)代碼實(shí)現(xiàn)淺析
  4. ASP.NET網(wǎng)站設(shè)置之文件夾權(quán)限設(shè)置淺析
  5. ASP.NET控件開(kāi)發(fā)之修改服務(wù)器控件方法淺析
責(zé)任編輯:仲衡 來(lái)源: 博客園
相關(guān)推薦

2009-07-29 13:50:26

UpdatePanelASP.NET

2009-08-05 18:46:21

ComboBox顯示ASP.NET控件開(kāi)發(fā)

2009-07-29 13:43:52

UpdatePanelASP.NET

2009-07-21 09:18:02

UpdatePanelASP.NET AJA

2009-08-05 18:32:28

HtmlTextWriASP.NET控件開(kāi)發(fā)

2009-07-29 13:32:06

ASP.NET控件使用

2009-08-04 10:43:59

ASP.NET控件開(kāi)發(fā)

2009-07-22 13:08:55

拯救UpdatePanASP.NET MVC

2009-08-06 15:21:45

ASP.NET控件開(kāi)發(fā)RenderConte

2009-07-21 15:50:47

ASP.NET控件JavaScript

2009-08-07 14:05:21

ASP.NET控件

2009-08-05 10:17:55

ASP.NET TheASP.NET開(kāi)發(fā)技巧

2009-08-07 14:40:36

RegularExprASP.NET驗(yàn)證控件

2009-08-07 15:24:16

ASP.NET模板控件

2012-09-26 09:46:29

ASP.NETWeb框架

2009-07-21 09:43:36

調(diào)用UpdatePanASP.NET

2009-08-06 09:18:01

ASP.NET自定義控ASP.NET控件開(kāi)發(fā)

2009-08-10 14:08:15

ASP.NET服務(wù)器控ASP.NET組件設(shè)計(jì)

2009-08-05 18:17:16

ASP.NET控件開(kāi)發(fā)基類(lèi)

2009-08-05 17:11:51

ASP.NET控件開(kāi)發(fā)ASP.NET服務(wù)器控
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久一热 | 99精品国自产在线 | 伊人狠狠| 久久国产日韩欧美 | www精品美女久久久tv | 亚洲综合资源 | 日韩精品久久久久 | 亚洲精品永久免费 | 精品一区二区三区在线观看国产 | 午夜电影福利 | 中文字幕三区 | 亚洲精品视频免费 | 综合二区| 欧美aⅴ片 | 国产精品一区二区av | 亚洲五码在线 | 久久久亚洲一区 | 精品乱人伦一区二区三区 | 欧美最猛黑人xxxx黑人 | 1000部精品久久久久久久久 | 欧美日韩大片 | 久久综合一区 | 亚洲免费视频网站 | 51ⅴ精品国产91久久久久久 | 国产黄色一级片 | 欧美午夜一区二区三区免费大片 | 九九免费观看视频 | 日韩三级免费网站 | 免费视频二区 | 国产成人一区二区三区 | 日韩一区二区三区在线 | 精品熟人一区二区三区四区 | 亚洲视频在线观看一区二区三区 | 日韩欧美视频在线 | 欧美精品一区二区三区蜜臀 | 欧美精品一区二区三区一线天视频 | 国产精品激情小视频 | 欧美精品一区二区在线观看 | 一级做受毛片免费大片 | 欧美区日韩区 | 亚洲成人网在线观看 |