校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > UpdatePanel觸發javascript腳本的方法附代碼

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

熱門標簽:電銷機器人教育 河北智能外呼系統軟件 綿陽防封電銷卡價格 宜賓語音外呼系統軟件 電銷機器人源碼網盤下載 調度系統外呼 福建外呼增值業務線路 伊春外呼業務系統 中國辦理電信400電話
一.預呈現數據無法更改

  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就是這么實現的,有興趣的可以下載一個用用 
您可能感興趣的文章:
  • js 觸發select onchange事件代碼
  • 代碼觸發js事件(click、change)示例應用
  • js獲取觸發事件元素在整個網頁中的絕對坐標(示例代碼)
  • javascript 動態改變onclick事件觸發函數代碼
  • JavaScript 動態添加腳本,并觸發回調函數的實現代碼
  • 文本框中,回車鍵觸發事件的js代碼[多瀏覽器兼容]
  • 用javascript獲取當頁面上鼠標光標位置和觸發事件的對象的代碼
  • 用按鈕觸發Javascript動態生成一個表格的代碼
  • FireFox與IE 下js兼容觸發click事件的代碼
  • 鼠標放上去觸發一個javascript提示框效果代碼
  • JS代碼觸發事件代碼實例

標簽:那曲 銅川 優質小號 延邊 新鄉 蘇州 電商邀評 河池

巨人網絡通訊聲明:本文標題《UpdatePanel觸發javascript腳本的方法附代碼》,本文關鍵詞  UpdatePanel,觸發,javascript,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《UpdatePanel觸發javascript腳本的方法附代碼》相關的同類信息!
  • 本頁收集關于UpdatePanel觸發javascript腳本的方法附代碼的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 舟山市| 临海市| 文安县| 临湘市| 左权县| 亳州市| 麦盖提县| 肥城市| 德江县| 瓦房店市| 南漳县| 顺义区| 夏河县| 承德县| 同德县| 伊川县| 正镶白旗| 荥阳市| 新田县| 永安市| 四子王旗| 渝中区| 连山| 镇远县| 东乌珠穆沁旗| 尼勒克县| 梅州市| 长泰县| 肃宁县| 英山县| 图木舒克市| 金门县| 巴南区| 林口县| 萝北县| 金门县| 克东县| 平顶山市| 宕昌县| 叙永县| 石渠县|