簡體   English   中英

在gridview中選擇一個項目后,Javascript函數未獲得文本框值(文本)

[英]Javascript function doesn't get textbox value (text) after selecting an item in gridview

我有2頁,即Cart.aspx和SelectPartner.aspx。 還有一個JavaScript文件popup.js

在Cart.aspx中,我有一個按鈕,可以通過InvokePop()函數打開頁面SelectPartner.aspx(作為新窗口)。

在SelectPartner.aspx中,我有一個gridview(啟用了Selection),一個文本框以及“確定”和“取消”按鈕。 這就是我想要做的:當我在gridview中選擇一個項目時,一列的值顯示在文本框中,當我按下按鈕Ok時,將調用函數ReturnPartner()並應關閉此窗口( SelectPartner.aspx),然后在Cart.aspx頁的另一個文本框中顯示此文本框的值。 如果我在SelectPartner.aspx的TextBox中寫入內容,則可以將該值傳遞給Cart.aspx頁中的TextBox,但是當我在gridview中按下選擇按鈕時,該值不會傳遞。

我不知道會發生什么,請幫助我...

這是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>

現在選擇Partner.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("=");
}

我建議您刪除window.showModalDialog()的使用並改為使用window.open(),因為所有瀏覽器都統一支持Window.open(),而window.ShowModalDialog()僅是MSIE功能。

據說showModalDialog()無法“回發”,因此需要iframe hack。

我使用window.open在所有瀏覽器上測試了您的代碼,效果很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM