0

これは非常に奇妙です。各行に項目テンプレートのチェックボックスとボタンがあるグリッドビューがあります。ユーザーが購入するアイテムのカートに行を追加することを表すボタンのテキスト値を (JQuery を使用して) 切り替えています。グリッドビューとは別のフォームにボタンがあり、クリックするとコードビハインドでイベントが発生し、行がスピンして選択された (トグルされたボタンテキスト) 行が処理されます。しかし、プロセス ボタンを押すと、グリッド行が元の状態 (元のボタン テキストと、以前に選択した行の変更された行属性) に戻ります。私はグリッドを再バインドしていません。これも更新グリッドではありません。現在、チェックボックスは常に問題なく機能していますが、ボタンのテキストは明らかに大きく異なります。なぜこれが起こっているのか、どうすれば修正できるのか、誰か教えてもらえますか? 私が持っている 1 つのアイデアは、非表示のチェックボックスの列を作成することです。ボタンのテキストを切り替えると、チェックボックスも切り替えることができます。しかし、なぜこれが起こっているのかを理解できたらいいのにと思います。また、処理ボタンをチェックした後のポストバックでは、画面もそのままの状態で描画されます。

チェックボックスとボタンを含む私のグリッドは次のとおりです。

        <div class="OneHundredPercentWide" style="padding-top:7px">
        <asp:Panel ID="Panel1" runat="server" Width="100%" >
            <asp:GridView id="grvSessionOrderDownloads" runat="server" BorderWidth="2px" BorderStyle="Solid" BorderColor="#C0C0FF"
                Font-Names="Arial" Font-Bold="True" Font-Size="8pt" GridLines="Horizontal" AutoGenerateColumns="False" 
                HorizontalAlign="Left" ForeColor="Blue" CellPadding="2" AllowSorting="True" Width="100%" 
                OnRowDataBound="grvSessionOrderDownloads_OnRowDataBound" DataKeyNames="SORD_ID">

                <HeaderStyle Font-Names="Arial" HorizontalAlign="Center" ForeColor="White" BackColor="#152EE5" 
                    CssClass="sessionOrderDownloadHeaders" />
                <RowStyle BackColor="White" ForeColor="#333333" />
                <AlternatingRowStyle BackColor="#A5B0FF" />
                <Columns>
                    <asp:BoundField Visible="False" DataField="SORD_ID" HeaderStyle-Width="0px" >
                <HeaderStyle Width="0px" />
                    </asp:BoundField>
                   <asp:TemplateField HeaderText="Select <br /> Files" HeaderStyle-ForeColor="White" > 
                 <ItemTemplate >
                            <asp:CheckBox ID="chkSelectVideo" runat="server" OnClick="checkboxClicked(this)" ToolTip="Select file for download" 
                                Enabled='<%# Eval("SORD_EnableSelectionCheckBox") %>' Checked='<%# Eval("SORD_SelectedForDownloadFlag") %>' />
                  </ItemTemplate>
                        <HeaderStyle Width="6%" />
                        <ItemStyle VerticalAlign="Middle" HorizontalAlign="Center" />
                    </asp:TemplateField><asp:TemplateField HeaderText="Prior <br /> Downld" HeaderStyle-ForeColor="White" > 
                        <ItemTemplate >
                            <asp:Button id="btnBuy" runat="server" OnClientClick="btnBuyToggle(this); return false;"
                                 Text="BUY This" CssClass="buyButton" Visible='<%# Eval("SORD_ShowBuyButton") %>' />
                         </ItemTemplate>
                        <HeaderStyle Width="7%" />
                        <ItemStyle CssClass="sessionOrderDownloadItems" VerticalAlign="Middle" HorizontalAlign="Center" />
                    </asp:TemplateField>
                </Columns>
             </asp:GridView>

そして、ここにボタンテキストをチェックするための私のコードの一部があります:

Dim gvr As GridViewRow
    For Each gvr In grvSessionOrderDownloads.Rows
        Dim selBtn As Button = CType(gvr.FindControl("btnBuy"), Button)
        If Not selBtn Is Nothing Then
            If selBtn.Enabled And selBtn.Visible Then
                Dim strSORD_ID As String = grvSessionOrderDownloads.DataKeys(gvr.RowIndex)("SORD_ID").ToString
                If selBtn.Text = "BUY Video" Then
                    // Note: I will process here
                End If
            End If
        End If
    Next

ありがとう、ジム

4

1 に答える 1

0

チェックボックスの変更は、ブラウザで変更されるとサーバーに戻されます。しかし、JS を使用してグリッド内のボタン (または他のフィールド) のテキストを変更すると、変更されたボタン テキスト (または他のフィールド) はサーバーに送信されません。したがって、ボタンが次のポストバックでレンダリングされると、元のデフォルト値である「BUY This」が使用されます。

ボタンのテキストを保持するには、ボタンとともに隠しフィールドを作成する必要があります。ボタンのテキストを変更する場合 (OnClientClick JS イベントで)、非表示フィールドの値も同時に変更します。隠しフィールドの変更はサーバーに送信され、プロセス ボタンのクリック イベントでそれらを読み取るのに役立ちます。

于 2012-05-07T11:50:30.893 に答える