javascript - UpdatePanel 内的 ASP.NET GridView 直到第二次单击才会更新

标签 javascript c# jquery asp.net code-behind

我在网上寻找答案,但没有找到任何答案。我在 UpdatePanel 内有一个 GridView 和一个 Linkbutton 列,用于在 Bootstrap 模式中显示一些详细信息。我遇到了一个问题,当用户单击 LinkBut​​ton 时,OnClick 事件不会触发,因此,为了解决这个问题,我在 Javascript 中创建了一个函数,该函数只会导致单击另一个 LinkBut​​ton 来触发 OnClick 事件。

现在工作正常,但直到第二次单击才发生任何变化。

ASP.NET 代码

<asp:UpdatePanel ID="upContent" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <table align="center">
            <tr>
                <td>
                    <asp:GridView ID="grvOrderTracing" runat="server" EmptyDataText="There are no pending orders for the selected date" AutoGenerateColumns="False" DataSourceID="SqlDTSgetOrdersByDate" CssClass="table table-striped table-hover table-responsive" GridLines="None" AllowPaging="True" PageSize="8" >
                        <PagerStyle CssClass="pagination-ys" />
                        <Columns>
                            <asp:BoundField DataField="Order ID" HeaderText="Order ID" SortExpression="Order ID" >
                                <ControlStyle CssClass="hide" />
                                <FooterStyle CssClass="hide" />
                                <HeaderStyle CssClass="hide" />
                                <ItemStyle CssClass="hide" />
                            </asp:BoundField>
                            <asp:TemplateField HeaderText="Order Number">
                                <ItemTemplate>
                                    <asp:LinkButton ID="lbtShowMoreInfo" runat="server" data-toggle="modal" data-target="#showLog" CommandName="OrderID" Text='<%# Bind("[Order Number]") %>' style="cursor: pointer; font-weight: bold;" OnClientClick="ActivityLog(this);">
                                    </asp:LinkButton>
                                    <asp:LinkButton ID="lbtActivityLog" runat="server" CommandName="OrderID" CssClass="hide" OnClick="ActivityLog_Click" Text='<%# Bind("[Order ID]") %>' ></asp:LinkButton>
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>
                    <asp:SqlDataSource ID="SqlDTSgetOrdersByDate" runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" SelectCommand="sp_getOrdersByDate" SelectCommandType="StoredProcedure" CancelSelectOnNullParameter="False">
                        <SelectParameters>
                            <asp:Parameter DefaultValue="0" Name="filter" Type="Int32" />
                            <asp:Parameter Name="startDate" Type="String" />
                            <asp:Parameter Name="endDate" Type="String" />
                        </SelectParameters>
                    </asp:SqlDataSource>
                </td>
            </tr>
        </table>
    </ContentTemplate>
</asp:UpdatePanel>

<asp:UpdatePanel ID="upLog" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <!-- Modal -->
        <div id="showLog" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" data-backdrop="static" data-keyboard="false">
            <div class="modal-dialog modal-lg" >
                <div class="modal-content">
                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                         <h4 class="modal-title" id="myModalLabel">Orden Log</h4>
                    </div>
                    <div class="modal-body">
                        <asp:GridView ID="grvLog" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDTSgetTracing" CssClass="table table-striped table-hover table-responsive" GridLines="None" >
                            <Columns>
                                <asp:BoundField DataField="Movement Date" HeaderText="Movement Date" SortExpression="Movement Date" ReadOnly="true" DataFormatString="{0:dd/MM/yyyy HH:mm}" />
                                <asp:BoundField DataField="User" HeaderText="User" SortExpression="User" ReadOnly="true" />
                                <asp:BoundField DataField="Action" HeaderText="Action" SortExpression="Action" ReadOnly="true" />
                                <asp:BoundField DataField="Comments" HeaderText="Comments" SortExpression="Comments"/>
                             </Columns>
                         </asp:GridView>
                         <asp:SqlDataSource ID="SqlDTSgetTracing" runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" SelectCommand="sp_getTracing" SelectCommandType="StoredProcedure">
                             <SelectParameters>
                                 <asp:Parameter  DefaultValue="0" Name="ord_id" Type="Int32"/>
                             </SelectParameters>
                         </asp:SqlDataSource>
                     </div>
                 </div>
             </div>
         </div>
     </ContentTemplate>
</asp:UpdatePanel>

Javascript代码

function ActivityLog(lbt) {
    lbt.nextSibling.nextSibling.click(); //Find the other LinkButton and click
}

C# 代码

protected void ActivityLog_Click(object sender, EventArgs e)
{
    SqlDTSgetTracing.SelectParameters["ord_id"].DefaultValue = ((LinkButton)sender).Text;
    SqlDTSgetTracing.Select(DataSourceSelectArguments.Empty);
    grvLog.DataBind();
    upLog.Update();
}

When clicking the first time

When clicnking the seccond time

单击两次后,数据将显示在 GridView 中。

我希望第一次单击时数据就显示在 GridView 中。

最佳答案

我认为您可能需要将 return false; 附加到 OnClientClick 的末尾,以阻止该控件的其余单击事件(由 ASP.NET 为您编码)从运行。这将确保只有您关心的 LinkBut​​ton 才会回发。

OnClientClick="ActivityLog(this);return false;"

不确定这是否可以解决点击两次的问题,但也许吧!

关于javascript - UpdatePanel 内的 ASP.NET GridView 直到第二次单击才会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39087906/

相关文章:

javascript - Jquery AJAX 调用未找到 Rails 路线

javascript - php 重定向到带有警报对话框的页面

javascript - 混合内容: Rewrite Javascript to use HTTPS-only

javascript - 打开一个新页面作为模态窗口

javascript - 按下 JQM 列表中的按钮

javascript - 单击按钮时调整窗口大小?

javascript - 对 Ajax 加载的页面使用浏览器后退按钮?

c# - 在创建模式 MVC 4 中填充 DropDownList 中的数据

C# 继承中的多个泛型

结构中的 C# 数组