如何从Gridview中的LinkBut ton触发Onclick事件驻留在updatePanel中?

问题描述 投票:0回答:1

我知道之前可能会问这个问题。我的gridview行根据搜索过滤器进行更改,该过滤器从数据库中获取数据。但是,当我点击链接按钮查看数据时,只有Onclientclick被解雇而且onclick没有被解雇。

这是我的代码:

<form id="form1" runat="server">
      <asp:HiddenField runat="server" ID="Hf" />
      <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager>
      <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
    <ContentTemplate>  
     <label>  Show  <asp:DropDownList runat="server" CssClass="custom-select custom-select-sm form-control form-control-sm"
    ID="RecordSize" AutoPostBack="true" Style="width: 51.75px; height: 30.75px;">
    <asp:ListItem Value="10" Selected="True">10</asp:ListItem>
    <asp:ListItem Value="25">25</asp:ListItem>
    <asp:ListItem Value="50">50</asp:ListItem>    
      </asp:DropDownList>  entries</label> <asp:Label Style="margin-left: 10px;" runat="server" ID="lblerror" ForeColor="Red"></asp:Label>
    <div id="m_table_1_filter" class="dataTables_filter">
     <label>Search:</label>
     <asp:TextBox runat="server" ID="txtSearch" type="search" autocomplete="off"
      AutoPostBack="true" MaxLength="20" CssClass="form-control form-control-sm" OnTextChanged="txtSearch_TextChanged" Style="margin-top: -30px; margin-left: 65px; width: 250px;"></asp:TextBox> 
    </div>

     <div class="row" style="display: block;">
      <asp:GridView OnPageIndexChanging="MandateGrid_PageIndexChanging" runat="server"
    ID="MandateGrid" AutoGenerateColumns="false" OnRowDataBound="MandateGrid_RowDataBound"
    PageSize="5" Style="text-align: center;" AllowPaging="true" AllowSorting="true"
    CssClass="table table-striped- table-bordered table-hover table-checkable dataTable no-footer">
    <PagerSettings FirstPageText="<<" LastPageText=">>" Mode="NumericFirstLast" />
    <Columns>
     <asp:TemplateField HeaderText="ID" Visible="false">
      <ItemTemplate>
    <asp:Label ID="LabelID" runat="server" Text='<%# Eval("ID") %>'></asp:Label>
      </ItemTemplate>
     </asp:TemplateField>
     <asp:TemplateField HeaderText="Mandate Status">
      <ItemTemplate>
    <asp:LinkButton CommandArgument="Select" CommandName="Select" ID="btnView" runat="server" Text="View"
    CssClass="btn m-btn--square" OnClientClick="changeAnchor();" OnClick="btnView_Click" ></asp:LinkButton>
      </ItemTemplate>
     </asp:TemplateField> 
      </asp:GridView>
     </div>

    </ContentTemplate>
      </asp:UpdatePanel>
     </form>

这是我的javascript函数,我只是用它来检索我在方法中需要的当前列索引。 :

function changeAnchor() {            
            $(function () {
                $("[id*=MandateGrid]").find("[id*=btnView]").click(function () {                    
                    var row = $(this).closest("tr");                   
                    var message = "Row Index: " + (row[0].rowIndex - 1);
                    $("#Hf").val(row[0].rowIndex - 1);                    
                    //alert(message);
                    return false;
                });
            });
}

这是我的onclick事件: -

protected void btnView_Click(object sender, EventArgs e)
    {      
        lblerror.Text = "Event Fired";
    }

如果我必须在此问题中添加任何其他代码,请告知我们。

javascript c# gridview asplinkbutton
1个回答
1
投票

你的设置是这样的,clientClick处理程序注册了一个clickhandler,这个clickhandler对于你似乎试图做的事情似乎是不必要的。 (设置一个隐藏字段,以便您可以找出回发时针对哪一行)。

由于事件是在恢复页面状态后处理的,因此您可以在btnView_Click中使用sender来确定服务器端的行,而无需在此处使用javascript。

尝试将发送者强制转换为Button,并在完全删除OnClientClick处理程序后查看调试器中的大量可用信息。

更直接地说,你的changeAnchor函数不会返回一个函数,它会在jquery准备就绪时注册一个要运行的函数。然后注册clickHandler然后呈现恰好与按钮匹配的html元素。你不应该这样做,每次渲染一个按钮时,你最终可能会为所有按钮注册相同的处理程序。最终的单击处理程序也返回false,这将取消回发。

© www.soinside.com 2019 - 2024. All rights reserved.