在一些應用中,希望將模式對話框的值回送(PostBack)到服務端,也就是執行一個服務端操作,從而刷新頁面。
舉個例子:比方說新建一個訂單,此時希望能在模式對話框中選擇產品,并將產品的ID返回,同時刷新訂單中的產品項,解決的方法有多種,這里只介紹執行服務器操作的方法。
要將客戶端數據回送(PostBack)到服務端并執行相應操作,顯然必須提交form并設置隱藏域__EVENTTARGET的值,好在asp.net已為我們完成了這些,只要以合適的參數調用__doPostBack就可以了。
另一個問題是如何把模式對話框的值也傳過服務端,這個就好說了,有多種方法,在這里用一個隱藏域來保存值,當然這個隱藏域必須加上runat="server"屬性。
下面給出部分代碼:
主頁面TestDialog.aspx:
<form id="form1" runat="server"> <input type="hidden" id="txtValue" runat="server"/> <br/> <asp:LinkButton id="lbtnOpen" runat="server" text="打開對話框"/> <br/> 對話框返回值:<asp:TextBox id="txtValue2" runat="server"/> </form>
主頁面后置文件TestDiallg.aspx.cs:
private void Page_Load( object Sender, EventArgs e ) { StringBuilder sb = new StringBuilder(); if ( ! IsClientScriptBlockRegistered( "clientScript" ) ) { sb.Append( "<script language='javascript'>\n" ) .Append( " function addproduct() { \n" ) .Append( " var ret = window.showModalDialog( 'test2.aspx' ); \n" ) .Append( " if ( ret != undefined ) { \n" ) .Append( " document.getElementById('" + txtValue.ClientID + "').value = ret \n" ) .Append( " __doPastBack('" + lbtnOpen.UniqueID + "', '');\n" ) .Append( " } \n" ) .Append( " }\n " ) .Append( "</script>\n" );
RegisterClientScriptBlock( "clientScript", sb.ToString() ); } lbtnOpen.Attributes.Add( "onClick", "javascript:addproduct();" ); }
private void lbtnOpen_Click( object Sender, EventArgs e ) { txtValue2.Text = txtValue.Value; }
private void InitializeComponent() { this.Load += new EventHandler( this.Page_Load ); this.lbtnOpen.Click += new EventHandler( this.lbtnOpen_Click ); }
對話框頁面test2.aspx:
<form id="form1" runat="server"> <asp:TextBox id="txtValue" runat="server"/> <br/> <input type="button" id="hlnkOk" value="確定" runat="server"/> </form>
對話框頁面后置文件Test2.aspx.cs
private void Page_Load( object Sender, EventArgs e ) { StringBuilder sb = new StringBuilder(); if ( ! IsClientScriptBlockRegistered( "clientScript" ) ) { sb.Append( "<script language='javascript'>\n" ) .Append( " function closedialog() { \n" ) .Append( " window.returnValue = document.getElementById('" + txtValue.ClientID + "').value;\n" ) .Append( " window.close();\n" ) .Append( " }\n " ) .Append( "</script>\n" );
RegisterClientScriptBlock( "clientScript", sb.ToString() ); } hlnkOk.Attributes.Add( "onClick", "javascript:closedialog();" ); }
|