部分页面加载后,复选框OnClick事件不起作用(UpdatePanel)

时间:2017-05-10 08:46:07

标签: javascript c# jquery asp.net gridview

我在UpdatePanel中的ASP.Net中有一个gridview,在gridview中我每行都有一个Checkbox和一个Button。如果选中该复选框,则将启用该按钮。如果未选中该复选框,则该按钮将被禁用。在第一页上加载jquery正常工作,在inspect元素中没有错误。但是在我点击运行数据绑定事件的按钮后,gridview根据需要改变了,但是在inspect中出现了错误,并且click事件没有工作。

这是我的aspx代码

 <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPages/PopUp.Master" AutoEventWireup="true" CodeBehind="abc.aspx.cs" Inherits="HMB.Sbadmin.Web.Pages.T.abc" %>

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
    <script type="text/javascript">
        $(document).ready(function () {
            chbActionEvent();
        });
        function pageLoad(sender, args) {
            if (args.get_isPartialLoad()) {
                chbActionEvent();
            }
        }

        function chbActionEvent() {
                $('.master_grid span.UnSettled').each(function () {
                    var chbAction = $(this).find('input:checkbox').attr('id');
                    $('#' + chbAction).change(function () {
                        var btnSettle = $(this).closest('tr').find(':submit').attr('id');
                        alert(chbAction + btnSettle);
                        if ($(this).is(':checked')) {
                            $('#' + btnSettle).attr('disabled', false);
                        }
                        else {
                            $('#' + btnSettle).attr('disabled', true);
                        }
                    });
                });
        }
    </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <asp:UpdatePanel ID="upMain" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <div id="gridContainer">
                <ul class="link_path">
                    <li>
                        <asp:Button ID="btnRefresh" runat="server" Text="Refresh" OnClick="btnRefresh_Clicked" CssClass="uiButton uiButtonConfirm" CausesValidation="false"  />
                    </li>
                </ul>
                <div id="dvMain" runat="server">
                    <asp:gridview ID="gvMain" runat="server" AutoGenerateColumns="False"
                        CssClass="master_grid"
                        HeaderStyle-CssClass="header"
                        OnRowDataBound="gvMain_RowDataBound"
                        OnRowCommand="gvMain_RowCommand">
                        <Columns>
                            <asp:TemplateField HeaderStyle-Width="50px" ItemStyle-HorizontalAlign="Center">
                                <ItemTemplate>
                                    <asp:CheckBox ID="chbAction" runat="server" CausesValidation="false" CssClass="UnSettled"/>
                                </ItemTemplate>
                            </asp:TemplateField>

                            <asp:TemplateField HeaderStyle-Width="120px" ItemStyle-HorizontalAlign="Center">
                                <ItemTemplate>
                                    <asp:Literal ID="ltrSettle" Text='<%# Eval("Settle") %>' runat="server" Visible="false"></asp:Literal>
                                    <asp:Button ID="btnSettle" runat="server" CssClass="UnSettled uiButton uiButtonConfirm" CommandName="cmdSettle" CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>' CausesValidation="false" Enabled="false"/><br />
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:gridview>

                    <div>
                        <asp:Label ID="lblError" runat="server" ForeColor="Red"></asp:Label> 
                    </div>        
                </div>        
            </div>

        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>

以下是inspect元素中的错误: enter image description here

我也尝试将代码放在RowDataBound中: `

protected void gvMain_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            switch (e.Row.RowType)
            {
                case DataControlRowType.Header:
                    setDataBoundHeader(e.Row);
                    break;
                case DataControlRowType.DataRow:
                    if (gvMain.Rows.Count >= 0 && (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate))
                    {
                        setDataBoundList(e.Row);
                    }
                    break;
            }
        }
protected void setDataBoundList(GridViewRow row)
        {
            CheckBox chbAction = (CheckBox)row.FindControl("chbAction");
            chbAction.Attributes.Add("OnClick", "chbActionEvent()");
        }

`

但是,没有运气。

请帮忙。

更新1.1:

还尝试了这个:`

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
    <script type="text/javascript">
        $(document).ready(function () {
            chbActionEvent();
        });
        //function pageLoad(sender, args) {
        //    if (args.get_isPartialLoad()) {
        //        chbActionEvent();
        //    }
        //}

        function chbActionEvent() {
                $('.master_grid span.UnSettled').each(function () {
                    var chbAction = $(this).find('input:checkbox').attr('id');
                    $('#' + chbAction).change(function () {
                        var btnSettle = $(this).closest('tr').find(':submit').attr('id');
                        alert(btnSettle);
                        if ($(this).is(':checked')) {
                            $('#' + btnSettle).attr('disabled', false);
                        }
                        else {
                            $('#' + btnSettle).attr('disabled', true);
                        }
                    });
                });
        }
    </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <script type="text/javascript">
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(chbActionEvent);
    </script>
    <asp:UpdatePanel ID="upMain" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <div id="gridContainer">
                <ul class="link_path">

` 但是得到了与第一个代码enter image description here

相同的错误

更新1.2

尝试使用Microsoft Visual Studio进行调试。在第一次尝试时,按钮事件正常工作。但是在部分回发之后(我第一次点击按钮之后),复选框仍然正常工作(检查中出错),但点击时按钮没有做任何事情。

更新1.3

btnSettle值:

2 个答案:

答案 0 :(得分:0)

部分回拨后,您必须bind event Sys.WebForms.PageRequestManager.getInstance().add_endRequest(InIEvent);。最好使用<script type="text/javascript"> Sys.WebForms.PageRequestManager.getInstance().add_endRequest(chbActionEvent); </script>

请在页面中添加以下代码:

org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder

有关详细信息,请查看Working with jQuery within the ASP.NET UpdatePanel

答案 1 :(得分:0)

自己找到了解决方案 问题出在sba.all.js中,稍微修改了一下代码就可以了。