0

LinkBut​​ton を保持する TemplateField を持つ GridView があります。このボタンをクリックすると、別の非表示の TemplateField にある XML が文字列に変換され、モーダル ダイアログで使用される非表示の div のラベルに割り当てられます。現在、ダイアログは適切な情報で期待どおりに開き、閉じて、問題なく表示するグリッド内の別のレコードを選択できます。これは問題が発生する場所であり、解決策を見つけることができませんでした。ポストバックを引き起こすページで何か他のことをすると、最後に開かれたダイアログボックスが新しいページの読み込みで開きます。

これが私の関連するマークアップです:

    <script type="text/javascript">
$(document).ready(function() {
    $("#txtBeginDate").datepicker();
    $("#txtEndDate").datepicker();

    $("#response").dialog({
        autoOpen: false,
        modal: true,
        height: "auto",
        width: "auto",
        title: "Equifax Response",
        close: function(ev, ui) {
            $(this).dialog('destroy').remove();
        }
    });

    $("[id*=lnkEquifaxResponse]").on("click", function EquifaxResopnse() {
        $("#lblDialog").empty();
    });

    if ($("#lblDialog").text() != "") {
        $("#response").dialog("open");
    }
});
    </script>

    <div id="response" visible="false">
        <asp:Label ID="lblDialog" runat="server" ></asp:Label>
    </div>

    <div id="Gridview">
        <asp:GridView ID="grClientTransactions" runat="server" AllowPaging="True" 
            PageSize="25" AutoGenerateColumns="False" DataKeyNames="ResponseXML"
            EmptyDataText="Record not found." EmptyDataRowStyle-BackColor="#CCCCCC" EmptyDataRowStyle-Font-Bold="true"
            CssClass="mGrid" PagerStyle-CssClass="pgr" 
            AlternatingRowStyle-CssClass="alt" 
            OnPageIndexChanging="grClientTransactions_PageIndexChanging" 
            onrowcommand="grClientTransactions_RowCommand">

            <Columns>
                <asp:TemplateField ShowHeader="false">
                    <ItemTemplate>
                        <asp:LinkButton ID="lnkEquifaxResponse" runat="server" CommandName="EquifaxResponse" Text="View" CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>'></asp:LinkButton>
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField Visible="false" HeaderText="Equifax Response">
                    <ItemTemplate>
                        <asp:Label ID="lblEquifaxResponse" runat="server" Text='<%# Bind("ResponseXML")%>' ></asp:Label></div>                            
                    </ItemTemplate>
                </asp:TemplateField>

            </Columns>
            <PagerStyle CssClass="pgr" />
            <AlternatingRowStyle CssClass="alt" />
        </asp:GridView>
    </div>

私はプログラミングが初めてなので、どんな助けでも大歓迎です。

4

1 に答える 1

1

次のようにコードを更新します。

 <div id="response" visible="false">
    <asp:Label ID="lblDialog" runat="server" EnableViewState="False"></asp:Label>
 </div>

私が理解している限り、リンクをクリックすると、lblDialog はサーバー上のデータで満たされ、viewstate が有効になっているため、ポストバックごとにデータが復元されます。よりも、if以下に示すように true を返し、ポップアップが表示されます。

if ($("#lblDialog").text() != "") {
    $("#response").dialog("open");
}

enableviewstate="false" を追加すると、lblDialog の内部テキストは 2 回目のポストバックで失われ、ページが読み込まれた後 (グリッド内のリンクがクリックされていない場合)、lable は空になります。

ビューステートとその仕組みの詳細については、こちらをご覧ください

于 2013-04-01T17:20:09.130 に答える