0

这很奇怪。我有一个gridview,每行都有项目模板复选框和按钮。我正在切换按钮的文本值(使用 JQuery),代表用户将行添加到购物车中以进行购买。我在表单上有一个与 gridview 分开的按钮,单击该按钮时会在后面的代码中引发一个事件,以旋转行并处理选定的(切换按钮文本)行。但是发生的事情是在按下处理按钮时,网格行将恢复到其原始状态(原始按钮文本以及先前选择的行的修改行属性)。我没有重新绑定网格。这也不是更新网格。现在复选框一直工作得很好,但按钮文本显然非常不同。谁能告诉我为什么会发生这种情况以及我该如何纠正它?我的一个想法是创建一列隐藏的复选框,当我切换按钮文本时,我也可以切换复选框。但我当然希望我能理解为什么会这样。此外,在检查了进程按钮的回发时,屏幕也以原始状态呈现。

这是我的带有复选框和按钮的网格:

        <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 更改网格中按钮(或其他字段)的文本时,更改的按钮文本(或其他字段)不会发送到服务器。因此,当按钮在下一个帖子中呈现时,它使用原始默认值“购买此”。

为了保留按钮文本,您必须与按钮一起创建一个隐藏字段。当您更改按钮的文本时(在 OnClientClick JS 事件中),同时更改隐藏字段的值。隐藏字段更改被发送到服务器,这可以帮助您在流程按钮单击事件中读取它们。

于 2012-05-07T11:50:30.893 回答