将模式对话框的返回值回送(PostBack)到服务端
?
在一些應(yīng)用中,希望將模式對(duì)話框的值回送(PostBack)到服務(wù)端,也就是執(zhí)行一個(gè)服務(wù)端操作,從而刷新頁面。
舉個(gè)例子:比方說新建一個(gè)訂單,此時(shí)希望能在模式對(duì)話框中選擇產(chǎn)品,并將產(chǎn)品的ID返回,同時(shí)刷新訂單中的產(chǎn)品項(xiàng),解決的方法有多種,這里只介紹執(zhí)行服務(wù)器操作的方法。
要將客戶端數(shù)據(jù)回送(PostBack)到服務(wù)端并執(zhí)行相應(yīng)操作,顯然必須提交form并設(shè)置隱藏域__EVENTTARGET的值,好在asp.net已為我們完成了這些,只要以合適的參數(shù)調(diào)用__doPostBack就可以了。
另一個(gè)問題是如何把模式對(duì)話框的值也傳過服務(wù)端,這個(gè)就好說了,有多種方法,在這里用一個(gè)隱藏域來保存值,當(dāng)然這個(gè)隱藏域必須加上runat="server"屬性。
下面給出部分代碼:
主頁面TestDialog.aspx:
????? <input type="hidden" id="txtValue" runat="server"/>
????? <br/>
????? <asp:LinkButton id="lbtnOpen" runat="server" text="打開對(duì)話框"/>
????? <br/>
????? 對(duì)話框返回值:<asp:TextBox id="txtValue2" runat="server"/>
?? </form>
主頁面后置文件TestDiallg.aspx.cs:
????? 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 );
?? }
對(duì)話框頁面test2.aspx:
????? <asp:TextBox id="txtValue" runat="server"/>
????? <br/>
????? <input type="button" id="hlnkOk" value="確定" runat="server"/>
?? </form>
對(duì)話框頁面后置文件Test2.aspx.cs
????? 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();" );
?? }
注意:在對(duì)話框頁面任何回傳(PostBack)操作都將導(dǎo)致一個(gè)新窗口被打開,解決方法請(qǐng)到csdn論壇查找。
總結(jié)
以上是生活随笔為你收集整理的将模式对话框的返回值回送(PostBack)到服务端的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DataGrid的几个小技巧
- 下一篇: DataGrid中自带的分页功能的使用