將模式對話框的返回值回送(PostBack)到服務端

在一些應用中,希望將模式對話框的值回送(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();" );
   }
發佈了73 篇原創文章 · 獲贊 14 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章