2007年11月21日

在UpdatePanel下,使用RegisterClientScript

在.Net 2.0上面,一般我們會使用Response.Write()或是Me.Page.ClientScript.XXX來註冊或是寫一段Script到Client端,但是當我們使用UpdatePanel做AsyncPostBack時,它是沒有作用的。這時我們就必須使用ScriptManager來做了。

將其相對應的功能列表於下:

RegisterArrayDeclaration
使用陣列名稱和陣列值,向 Page 物件註冊 JavaScript 陣列宣告。
ScriptManager.RegisterArrayDeclaration(UpdatePanel1,"Hello",,"1,2,3");

RegisterClientScriptBlock
向Page物件註冊用戶端指令碼。最後一個參數若為true,則會自動加上<script></script>
ScriptManager.RegisterClientScriptBlock(UpdatePanel1,this.GetType(), "HelloWorld", "function helloWorld(){alert(1);}", true);

RegisterClientScriptInclude
向 Page 物件註冊用戶端指令碼 Include。
ScriptManager.RegisterClientScriptInclude(UpdatePanel1,this.GetType(),"HelloWorld",Server.MapPath("test.js"));

RegisterClientScriptResource
使用型別和資源名稱,向 Page 物件註冊用戶端指令碼資源。
ScriptManager.RegisterClientScriptResource(UpdatePanel1,this.GetType(),"test.js");

RegisterExpandoAttribute
將名稱/值組註冊為指定之控制項的自訂 (Expando) 屬性
ScriptManager.RegisterExpandoAttribute(UpdatePanel1,Button1.ClientID,"attributeName","attributeValue",true

RegisterHiddenField
向 Page 物件註冊隱藏值
ScriptManager.RegisterHiddenField(UpdatePanel1,"hiddenFieldName", "hiddenFieldIntialValue

RegisterOnSubmitStatement
使用類型、索引鍵和指令碼常值 (Literal),向 Page 物件註冊 OnSubmit 陳述式。當送出
HtmlForm 時,會執行該陳述式
ScriptManager.RegisterOnSubmitStatement(UpdatePanel1,this.GetType(),"test","return window.confirm('test'))

RegisterStartupScript
向 Page 物件註冊啟始指令碼
ScriptManager.RegisterStartupScript(UpdatePanel1,this.GetType(),"HelloWorld", "alert('The page has loaded!')",true);



除了利用上面這一些Method將Script註冊到Client外,在UpdatePanel的AsyncPostBack啟動前後都可以加上一個Script Function,會先去呼叫該Function,然後才去做AsyncPostBack。語法如下:

Me.Page.ClientScript.RegisterStartupScript(Me.GetType,"AjaxBeforeUpdatePanelLoad", "<script type='text/javascript'>Sys.WebForms.PageRequestManager.getInstance).add_initializeRequest(BeforeUpdatePanelLoad);</script>")


Me.Page.ClientScript.RegisterStartupScript(Me.GetType,"AjaxAfterUpdatePanelLoad", "<script type='text/javascript'>Sys.WebForms.PageRequestManager.getInstance).add_endRequest(AfterUpdatePanelLoad);</script>")

這樣一來我們就可以自己寫BeforeUpdatePanelLoad和AfterUpdatePanelLoad去做一些我們想要統一做的Script

沒有留言:

張貼留言