2012-01-09 18 views
0

2ページ、Cart.aspxとSelectPartner.aspxがあります。 JavaScriptファイルpopup.jsJavascript関数は、グリッドビューでアイテムを選択した後でテキストボックス値(テキスト)を取得しません。

In Cart.aspx InvokePop()関数でSelectPartner.aspx(新しいウィンドウとして)というページを開くボタンがあります。

SelectPartner.aspxには、グリッドビュー(選択が有効)、テキストボックス、およびボタンのOKとキャンセルがあります。これは私がやりたいことです:グリッドビューでアイテムを選択すると、テキストボックスに1つのカラムの値が表示され、ボタンOkを押すと関数ReturnPartner()が呼び出され、このウィンドウを閉じる必要がありますSelectPartner.aspx)、このテキストボックスの値をCart.aspxページの別のテキストボックスに表示します。 SelectPartner.aspxのTextBoxに何かを書き込むと、その値をCart.aspxページのTextBoxに渡すことができますが、gridviewのselectボタンを押すと値が渡されません。私は何が起こるか分からない

、私を助けてください...ここで

はCart.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Cart.aspx.cs" Inherits="NMv01.Cart" %> 
<%@ Register TagPrefix="asp" Namespace="AjaxControlToolkit" Assembly="AjaxControlToolkit"%> 
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 
    <style type="text/css"> 
     #Select1 
     { 
      height: 16px; 
      width: 24px; 
     } 
    </style> 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
<script type="text/javascript" src="popup.js"></script> 
    <asp:Label ID="lblPartnerId" runat="server" Text="ID del Socio"></asp:Label> 
       <br /> 
       <asp:TextBox ID="txtPartnerID" runat="server"></asp:TextBox> 
       &nbsp;&nbsp;<asp:Button ID="btnPartnerId" runat="server" Text="Elegir Socio" /> 
       &nbsp; 


</asp:Content> 

今SelectPartner.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SelectPartner.aspx.cs" Inherits="NMv01.catalog.SelectPartner" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <script type="text/javascript" src="popup.js"></script> 
    <style type="text/css"> 
     .style1 
     { 
      width: 100%; 
     } 
    </style> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 

     <table class="style1"> 
      <tr> 
       <td> 
        &nbsp;</td> 
       <td> 
        <asp:GridView ID="grdSelectPartner" runat="server" AutoGenerateColumns="False" 
         AutoGenerateSelectButton="True" DataKeyNames="PartnerId" 
         DataSourceID="srcSelectPartner" 
         onselectedindexchanged="grdSelectPartner_SelectedIndexChanged"> 
         <Columns> 
          <asp:BoundField DataField="PartnerName" HeaderText="PartnerName" 
           SortExpression="PartnerName" /> 
          <asp:BoundField DataField="PartnerId" HeaderText="PartnerId" ReadOnly="True" 
           SortExpression="PartnerId" /> 
          <asp:BoundField DataField="PartnerCity" HeaderText="PartnerCity" 
           SortExpression="PartnerCity" /> 
         </Columns> 
        </asp:GridView> 
        <asp:SqlDataSource ID="srcSelectPartner" runat="server" 
         ConnectionString="Data Source=ZUNIGA-PC\SQL1;Initial Catalog=NovamMonetanDB;User ID=sa; pwd=Next2011" 
         ProviderName="System.Data.SqlClient" 

         SelectCommand="SELECT [PartnerName], [PartnerId], [PartnerCity] FROM [Partners] ORDER BY [PartnerName]"> 
        </asp:SqlDataSource> 
       </td> 
       <td> 
        &nbsp;</td> 
      </tr> 
      <tr> 
       <td> 
        &nbsp;</td> 
       <td> 
        <asp:Label ID="Label1" runat="server" Text="ID:"></asp:Label> 
        &nbsp;<asp:TextBox ID="txtPartner" runat="server"></asp:TextBox> 
       </td> 
       <td> 
        &nbsp;</td> 
      </tr> 
      <tr> 
       <td> 
        &nbsp;</td> 
       <td> 
        <asp:Button ID="btnOk" runat="server" Text="OK" OnClientClick="ReturnPartner()" /> 
        &nbsp; <asp:Button ID="btnCancel" runat="server" Text="Cancelar" /> 
        <br /> 
        <br /> 
       </td> 
       <td> 
        &nbsp;</td> 
      </tr> 
     </table> 

    </div> 
    </form> 
</body> 
</html> 

そして、これのコードですpopup.jsファイル:

function InvokePop(fname) { 
    val = document.getElementById(fname).value; 
    // to handle in IE 7.0   
    if (window.showModalDialog) { 
     retVal = window.showModalDialog("SelectPartner.aspx?Control1=" + fname, 'Choose Partner', "dialogHeight:360px,dialogWidth:360px,resizable:yes,center:yes,"); 
     document.getElementById(fname).value = retVal; 
    } 
    // to handle in Firefox 
    else { 
     retVal = window.open("SelectPartner.aspx?Control1=" + fname, 'Choose Partner', 'height=360px,width=360px,resizable=yes,modal=yes'); 
     retVal.focus(); 
    } 
} 


function ReturnPartner() { 
    var returnString = document.getElementById('txtPartner').value; 
    RetrieveControl(); 
    // to handle in IE 7.0 
    if (window.showModalDialog) { 
     window.returnValue = returnString; 
     window.close(); 
    } 
    // to handle in Firefox 
    else { 
     if ((window.opener != null) && (!window.opener.closed)) { 
      // Access the control.  
      window.opener.document.getElementById(ctr[1]).value = returnString; 
     } 
     window.close(); 
    } 
} 

function RetrieveControl() { 
    //Retrieve the query string 
    queryStr = window.location.search.substring(1); 
    //Retrieve the control passed via querystring 
    ctr = queryStr.split("="); 
} 

答えて

1

window.ShowModalDialog()はMSIE機能のみであるのに対し、Window.open()はすべてのブラウザで一様にサポートされているため、window.showModalDialog()の使用を削除してwindow.open()を使用することをお勧めします。

showModalDialog()は、iframeハックが必要な「ポストバック」の問題があると言われています。

すべてのブラウザでwindow.openを使ってコードをテストしたところ、うまくいきました。

+0

ありがとうございました!それが問題でした。ところで、この文脈でどのようにパラメータをReturnPartner()に渡すことができますか?私は成功なしに多くの方法を試みた。 – myrmix

+0

遅く返事を申し訳ありません。このリンクを見てくださいhttp://stackoverflow.com/q/87359/168371 –

関連する問題