Как запустить событие Onclick из LinkButton в Gridview находится в updatePanel? - PullRequest
0 голосов
/ 01 марта 2019

Я знаю, что это можно было спросить раньше.Строки моего вида сетки меняются в соответствии с поисковым фильтром, который выбирает данные из базы данных.Но когда я нажимаю на кнопку «Ссылка», чтобы просмотреть только данные, 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";
    }

Пожалуйста, дайте мне знать, если мне нужно добавить какой-либо другой код к этому вопросу.

1 Ответ

0 голосов
/ 01 марта 2019

ваша установка такова, что обработчик clientClick регистрирует обработчик кликов, и этот обработчик кликов кажется ненужным для того, что вы пытаетесь сделать.(установите скрытое поле, чтобы можно было выяснить, какая строка была нацелена на обратную передачу).

Поскольку события обрабатываются после восстановления состояния страниц, вы можете просто использовать отправителя в btnView_Click, чтобы определить строку вна сервере, не прибегая к javascript здесь.

попробуйте привести отправителя к Баттону и увидеть весь объем доступной информации в отладчике после полного удаления обработчика OnClientClick.

Более точно, ваш changeAnchorФункция не возвращает функцию, она регистрирует функцию, которая будет выполняться всякий раз, когда jquery будет готов.это, в свою очередь, регистрирует clickHandler на представленных HTML-элементах, которые соответствуют кнопке.вам не следует этого делать, в итоге вы, вероятно, регистрируете один и тот же обработчик для всех кнопок, каждый раз, когда кнопка отображается.Обработчик возможного нажатия также возвращает false, что отменяет обратную передачу.

...