0

以下の点で困っています。

シナリオ: データにバインドする列がいくつかある ASP グリッドがあります。最後の列はテンプレート フィールドに変換されました。このテンプレート フィールドには、モーダル ポップアップ エクステンダーが関連付けられたボタンがあります。このフィールド内には、モーダル ポップアップが隠されています。このモーダル ポップアップは、新しいアカウントを追加するために使用されます。2 つのテキスト ボックス、ドロップダウン リスト、およびボタン (「追加」と「キャンセル」) が含まれています。「追加」をクリックすると、コードビハインドに新しいアカウントが挿入された後、モーダルが閉じます。

問題: 問題 なくドロップ ダウン リストをキャッシュから表示およびロードするためのポップアップが表示されます。コードビハインドでボタンクリックイベントを発生させるにはどうすればよいですか。_doPostBack('btnAddAcc','') を実行する JavaScript 関数を使用しようとしましたが、「JavaScript エラー: オブジェクトが必要です」というエラーが返され続けます。Googleで約1時間後に収集したのは、実際にはグリッドビューセル内にあり、直接アクセスできないため、「btnAddAcc」が見つからないためです。会社が持っているように、ページメソッドとajax呼び出しを使用することは最後の手段です.これに対する厳格なポリシーであり、一連の事務処理の後にのみ許可されます。

コード:

<asp:GridView ID="gvNEA" runat="server" CssClass="gridA_Orange" 
AutoGenerateColumns="False" AllowPaging="True" 
EmptyDataText="No transactions with 'Non Existent Account(s)'" 
ShowHeaderWhenEmpty="True" Width="945px">
<Columns>
    <asp:BoundField HeaderText="Transaction Date" DataField="Transaction_Date" />
    <asp:BoundField HeaderText="Account Number" DataField="Account_Number" />
    <asp:BoundField HeaderText="Description" DataField="Description"/>
    <asp:BoundField HeaderText="Amount" DataField="Amount"/>
    <asp:BoundField HeaderText="Offset Account" DataField="OffsetAccount" />
    <asp:BoundField HeaderText="File Name" DataField="FileName" />
    <asp:BoundField HeaderText="Transaction Type" DataField="TransType" />
    <asp:TemplateField ShowHeader="False">
        <ItemTemplate>
            <asp:Button ID="btnAdd" runat="server" CausesValidation="false" 
                OnClientClick="showPopUp('pupAddAcc');" Text="Add Account" CssClass="ButtonStyle_Gray" />
            <asp:ModalPopupExtender ID="mpeAddAcc" runat="server" 
                BackgroundCssClass="modalBackground" TargetControlID="btnAdd"
                PopupControlID="pnlAddAcc"
                CancelControlID="btnCancelAddAcc" DropShadow="True" 
                Enabled="True">
            </asp:ModalPopupExtender>
            <div id="pupAddAcc">
                <asp:Panel ID="pnlAddAcc" runat="server" BackColor="White" 
                    BorderColor="White" BorderStyle="Solid" BorderWidth="1px" Width="430">                
                    <table align="center" id="tblAddAcc" class="BasicHTMLTable">
                    <asp:HiddenField ID="hfTransType" runat="server" Value='<%# Bind("TransType") %>' />
                        <tr align="center" >
                            <td colspan="2">
                                <asp:Label ID="lblAccountHeader" runat="server" width="390px" Text="Add Account" 
                                CssClass="ButtonStyle_Orange" Height="25px" Font-Bold="true" Font-Size="Large" />
                            </td>
                        </tr>
                        <tr>
                            <td align="right" class="PopupCol">Account Number</td>
                            <td align="left" ><asp:Label ID="lblAccNumber" runat="server" Width="165px" 
                                    Text='<%# Bind("Account_Number") %>' /></td>
                        </tr>
                        <tr>
                            <td align="right" class="PopupCol" >Name</td>
                            <td align="left" ><asp:TextBox ID="txtName" runat="server" Width="165px" />
                                <asp:RequiredFieldValidator ID="rfvName" runat="server" 
                                    ControlToValidate="txtName" Text="*" ValidationGroup="acc" />
                            </td>
                        </tr>
                        <tr>
                            <td align="right" class="PopupCol" >Search Name</td>
                            <td align="left" ><asp:TextBox ID="txtSearchName" runat="server" Width="165px" />
                                <asp:RequiredFieldValidator ID="rfvSName" runat="server" 
                                    ControlToValidate="txtSearchName" 
                                    Text="*" ValidationGroup="acc" />
                            </td>
                        </tr>
                        <tr>
                            <td align="right" class="PopupCol" >Group</td>
                            <td align="left" >
                                <asp:DropDownList ID="ddlGroup" runat="server" Width="170">                                
                                </asp:DropDownList>
                            </td>
                        </tr>
                        <tr>
                            <td align="right" class="PopupCol" >Currency</td>                                    
                            <td align="left" >
                                <asp:DropDownList ID="ddlCurrency" runat="server" Width="170px">
                                </asp:DropDownList>
                            </td>
                        </tr> 
                        <tr>
                            <td align="center" colspan="2">
                                <asp:Button ID="btnAddAcc" runat="server" Text="Add Account" 
                                    CssClass="ButtonStyle_Orange" OnClientClick="javascript:addAccount()" 
                                    ValidationGroup="acc" />  
                                &nbsp&nbsp                      
                                <asp:Button ID="btnCancelAddAcc" runat="server" Text="Cancel" CssClass="ButtonStyle_Orange" />
                            </td>
                        </tr>
                    </table>                
                </asp:Panel>
            </div>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:BoundField HeaderText="RecId" DataField="RecId" Visible="False"/>
</Columns>

この JavaScript 関数を使用してポップアップを開きます。

function showPopUp(p) {
        var Popup = document.getElementById(p);
        Popup.style.visibility = "visible";
        Popup.style.display = "";
    }

btnAddAcc がクリックされたときの機能:

function addAccount() {
        _doPostBack('btnAddAcc', '');
    };

コードビハインド関数

Protected Sub btnAddAcc_Click(sender As Object, e As System.EventArgs)
    'Code for inserting new account goes here
End Sub

事前に助けと提案をありがとう。よろしく

4

2 に答える 2

1

OnClick をサーバー側イベントに設定するとどうなりますか?

<td align="center" colspan="2"> 
  <asp:Button ID="btnAddAcc" runat="server" Text="Add Account"  
     CssClass="ButtonStyle_Orange" OnClick="btnAddAcc_Click"  
     ValidationGroup="acc" />   
  &nbsp&nbsp                       
  <asp:Button ID="btnCancelAddAcc" runat="server" Text="Cancel" CssClass="ButtonStyle_Orange" /> 
</td> 

しかし...イベント参照(つまり、「__doPostback」のもの)を取得する正しい方法は、サーバー側で取得することですClientScript.GetPostBackEventReference

于 2012-06-10T15:02:30.737 に答える
0

私は最終的に答えを見つけました。gridview.RowCommand イベントを使用する必要がありました。グリッドビューのセル内のすべてのボタン関連イベントを処理します。

msdn のドキュメントを参照してください。このコマンドのほとんどを説明する必要があります。

GridView.RowCommand

よろしくジョージ

于 2012-06-10T18:09:02.033 に答える