javascript - 单击按钮后 GridView 上的类属性不起作用

标签 javascript c# jquery asp.net gridview

我有一个 GridView,您可以在其中编辑该行的信息。因此,您可以单击该行,这会弹出一个可以更改内容的框,然后单击保存。 但是在我点击保存按钮并尝试点击另一行后,弹出框不再显示。我必须完全关闭表格然后返回并单击一行。如果我不点击保存按钮,它工作正常。我单击一行,关闭弹出框并单击另一行。问题仅在单击保存按钮后出现。

GridView :

<asp:UpdatePanel ID="updOBSAddress" UpdateMode="Conditional" runat="server" >
                               <ContentTemplate>
                                <asp:GridView runat="server" GridLines="None" ID="GVAddresses"  OnRowDataBound="GVAddresses_RowDataBound"  AutoGenerateColumns="false" CssClass="tblStatus" AllowSorting="false" >                    
                                    <Columns>
                                        <asp:TemplateField HeaderText="Code">
                                            <ItemTemplate><%# Eval("AccountCode") %></ItemTemplate>
                                        </asp:TemplateField>
                                        <asp:TemplateField HeaderText="Name">
                                            <ItemTemplate><%# Eval("Name") %></ItemTemplate>
                                        </asp:TemplateField>
                                    </Columns>
                                </asp:GridView>
                            </ContentTemplate>
                    <Triggers>
                        <asp:AsyncPostBackTrigger ControlID="btnUpdateOBSAddress" />
                    </Triggers>
                </asp:UpdatePanel> 

代码隐藏:

protected void GVAddresses_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        GridView gv = sender as GridView;
        DataRowView drv = e.Row.DataItem as DataRowView;
        //e.Row.Cells[0].Attributes.Add("onclick", "event.stopPropagation();");

        if (drv != null)
        {
            e.Row.Attributes.Add("class", "GVAddressesRow");
            e.Row.Attributes.Add("ID", "GVAddressesRow_" + drv["ID"].ToString());
            e.Row.ToolTip = "Click here to Edit Address";
        }
    }
}

按钮:

protected void btnUpdateOBSAddress_Click(object sender, EventArgs e)
    {

    }

然后在 javascript 中单击该类时,它应该显示弹出窗口,但在我单击按钮后不再调用它:

 $(".GVAddressesRow").click(function (e) {  
            ShowAddOBSAddress(this, e.pageX, e.pageY, "Edit");
            EditOBSAddress($(this).attr("ID")); 
        });

最佳答案

问题是 UpdatePanel。它使用 Ajax 刷新 GridView,虽然用户没有看到回发,但 DOM 仍然发生变化,并且之前使用 $(".GVAddressesRow").click 进行的绑定(bind)丢失了。这就是为什么您必须在 UpdatePanel 刷新后再次执行它的原因。

您可以为此使用 PageRequestManager

<script type="text/javascript">
    $(document).ready(function () {
        bindPopup();
    });

    var prm = Sys.WebForms.PageRequestManager.getInstance();

    prm.add_endRequest(function () {
        bindPopup();
    });

    function bindPopup() {
        $(".GVAddressesRow").click(function (e) {
            ShowAddOBSAddress(this, e.pageX, e.pageY, "Edit");
            EditOBSAddress($(this).attr("ID"));
        });
    }
</script>

关于javascript - 单击按钮后 GridView 上的类属性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46003867/

相关文章:

javascript - 如何利用 JavaScript 和 ES5 从基于关键字段的对象数组中获取唯一值

c# - 没有语言语法 [] 实例化新数组

javascript - jQuery 可排序列表在创建时不重新排序

jquery - 漂亮照片更改图片回调数据

javascript - 使用 Spark 在 freemarker 模板中包含 javascript 文件

javascript - 如何在 IE8 中使用 Ajax 将图像发送到 .net Webservice?

javascript - 关闭 Bootstrap 进度条上的 CSS3 过渡

c# - 文件无法访问,因为它被另一个进程异常使用

c# - .NET 正则表达式如何匹配在特定位置不包含单词的字符串

javascript - 使用 jQuery 在提交时显示/隐藏表单