激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP教程 - UpdatePanel觸發javascript腳本的方法附代碼

UpdatePanel觸發javascript腳本的方法附代碼

2019-10-08 09:42asp代碼網 ASP教程

一.預呈現數據無法更改   1.大家知道,預呈現的數據是無法更改的,以前可能提到過,這里再看demo,自定義一個控件 [DefaultProperty("Text")] [ToolboxData("<{0}:JsControl runat=server></{0}:JsControl>")] public class JsControl : WebControl {

一.預呈現數據無法更改 

  1.大家知道,預呈現的數據是無法更改的,以前可能提到過,這里再看demo,自定義一個控件 

[DefaultProperty("Text")] 
[ToolboxData("<{0}:JsControl runat=server></{0}:JsControl>")] 
public class JsControl : WebControl 

[Bindable(true)] 
[Category("Appearance")] 
[DefaultValue("")] 
[Localizable(true)] 
 public string Text 
 { 
 get 
 { 
 String s = (String)ViewState["Text"];  
 return ((s == null) ? String.Empty : s);  
 } 

  set 
 { 
  ViewState["Text"] = value;  
  } 


 protected override void OnPreRender(EventArgs e) 
 { 
 Text = "hello,you can't change me";  
 base.OnPreRender(e);  
 } 

 protected override void RenderContents(HtmlTextWriter output) 
 { 
 output.Write(Text);  
 } 

aspx頁面 

protected void Button1_Click(object sender, EventArgs e) 

JsControl1.Text = "I want to change the Text property";  

  你會發現你并未更改屬性.這牽涉到控件生命周期的執行.為什么要說這個,因為控件的大部分腳本都是在預呈現中注冊的.  

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

  二.UpdatePanel引起的問題 

  上面的問題如果是服務器提交回傳的則可行,主要問題是我們要用ajax無刷新注冊腳本.以下我們再來看asp.net2.0內置的treeview控件,拖個控件要頁面看其生成的html代碼。 

  你已經看到很多的腳本注冊和初始化了. 

  我們來測試下UpdatePanel能干什么事情,我們設置其屬性Visible為False到True 

  借助FireBug的威力我們來看下UpdatePanel在無刷新狀態下返回給了我們什么 
  
  出錯了,大家可能也遇到過此情況,很正常嘛,UpdatePanel沒有為我們注冊腳本也沒未我們初始化,在屬于正常現象,UpdatePanel只管其容器里面的,其他的不歸它管. 

  三.解決方法 

  要解決TreeView控件,我是想不出來,這個控件算是在asp.net ajax模式下算是完蛋了.為了迎合asp.net ajax框架的運用,我們需要知道UpdatePanel無刷新更新范圍,當我們自己定義控件的時候就需要注意. 

1.控件本身標簽 
2.控件內部 
3.UpdatePanel容器內部 

  若想使用UpdatePanel更新數據后再觸發客戶端事件的,有以下方案 

  1.通過更改現有控件屬性,如 

Button1.Attributes["onmouseover"] = "alert('hello')";  
  2.在呈現過程中腳本初始化 

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

如下 
protected override void RenderContents(HtmlTextWriter output) 

output.Write("<script src=\"xxxx.js\"></script>");  
output.Write(Text);  
output.Write("<script>alert('hello')</script>");  

  四.幾個誤區 

  1.驗證控件在ajax框架中可以完好使用 
其實是其加載了一段腳本,不然其也會掛掉 
  2.狀態保留 
  在UpdatePanel中更新數據后,再Postback,無刷新更新的數據狀態還保留 
  3.更新數據后執行客戶端腳本 

曾經我們天真的會這么寫 

protected void Button1_Click(object sender, EventArgs e) 

Label1.Text = "alert('hello')";  

  結果什么也沒發生,window.onload事件已過,除非你刷新(可你不想刷新),不然沒人幫你觸發。 
  誰來觸發?微軟幫我們準備好了。你要的大概就是這個了,數據更新前后都是一個事件觸發。我們可以圍繞著這兩個事件為控件做點事情。這個狀態適合于數據取到后就立馬觸發的需要。 
Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);  
 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);  
 function BeginRequestHandler(sender, args) 
 { 
 var elem = args.get_postBackElement();  
 ActivateAlertDiv('visible', 'AlertDiv', elem.value + ' processing');  
 } 
 function EndRequestHandler(sender, args) 
 { 
 ActivateAlertDiv('hidden', 'AlertDiv', '');  
 } 
 function ActivateAlertDiv(visstring, elem, msg) 
 { 
 var adiv = $get(elem);  
 adiv.style.visibility = visstring;  
 adiv.innerHTML = msg;  
 } 
  其他的話我們也可以更改控件屬性,就如加個onclick事件什么的都可以 

  五.另類解決方法 

此方法比較的絕,但用起來比較的爽。UpdatePanel之所以無法獲取到腳本數據,是因為其獲取范圍還不夠。。。接著的想法是: 

  照樣無刷新取數據,但取回來的數據跟Postback回來的數據一樣。 
可能有人說會比較耗性能,那都是相對的。不過也是一個很好的想法。Telerik公司的RadAjaxPanel就是這么實現的,有興趣的可以下載一個用用 .

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一本色道久久99精品综合蜜臀 | 久久av喷吹av高潮av懂色 | 午夜精品福利视频 | 亚欧在线免费观看 | 被玩坏了的女老师(高h np) | xnxx 日本19| 在线视频 亚洲 | 国产一区二区三区在线视频 | 国产人成免费爽爽爽视频 | 91看片免费在线观看 | 欧美色性 | 九九视屏| 性色av免费在线观看 | 1314成人网 | 免费的性生活视频 | 国产成人77亚洲精品www | 精品国产96亚洲一区二区三区 | 未成年人在线观看 | 日韩剧情片 | 九九精品影院 | 国产在线区 | 成人毛片一区二区三区 | 午夜视频亚洲 | 久久免费视频7 | 日韩毛片一区二区三区 | 成人福利电影在线观看 | 中文字幕观看 | 久久视频精品 | 日韩毛片网 | 国产 一区 精品 | 被玩坏了的女老师(高h np) | 亚洲一级片免费观看 | 99999久久久久久 | 成人视屏在线 | 黄色免费在线网站 | 久久精品久久久久 | 久久久久久久久浪潮精品 | 最新毛片在线观看 | 青青国产在线视频 | 美女黄网站免费观看 | 日本中文字幕久久 |