【问题标题】:Button Inside Gridview Inside Update Panel Not Working更新面板内的Gridview内的按钮不起作用
【发布时间】:2015-11-25 00:47:01
【问题描述】:

我刚开始在我的解决方案中使用更新面板,所以我正在慢慢熟悉它们。我有一个 GridView,它有一个与显示的每一行关联的删除按钮。当我单击删除按钮时,它的 OnClick 事件应显示一个面板,该面板充当半模态确认框(作为灯箱完成)以删除与相关行关联的记录。但是,当我单击该按钮时,该面板不会显示,因为它全部位于更新面板中。没有更新面板也能正常工作

有什么想法吗?

这是我的代码的精简版:

<script runat="server">
Protected Sub LinkButtonDelete_Click(ByVal Sender As Object, ByVal e As EventArgs)
    PanelConfirmMessage.Visible = True
    PanelConfirmLightBox.Visible = True
End Sub
'.... note there is other code that handles the delete ...
</script>

<html>
<head"></head>
<body>
<form id="form1" runat="server">
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:GridView ID="GridView1" runat="server" DataSourceID="DataSourceGridView1">
                <Columns>
                    <asp:templatefield HeaderText="Name">
                        <ItemTemplate><asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("MyFieldName") %>' /></ItemTemplate>
                    </asp:templatefield>
                    <asp:TemplateField HeaderText="Delete">
                        <ItemTemplate><asp:LinkButton ID="LinkButtonDelete" runat="server" OnClick="LinkButtonDelete_Click"></asp:LinkButton></ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
            <asp:SqlDataSource ID="DataSourceGridView1" runat="server" ConnectionString="<%$ ConnectionStrings:MyString %>" SelectCommand="MySelectCommand" SelectCommandType="StoredProcedure"></asp:SqlDataSource>
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:Panel runat="server" ID="PanelConfirmMessage" Visible="false">
        <p>Are you sure you want to continue?</p>
        <asp:Button runat="server" ID="ButtonYes" Text="Yes" OnClick="ButtonYes_Click" />
        <asp:Button runat="server" ID="ButtonNo" Text="No" OnClick="ButtonNo_Click" />
    </asp:Panel>
    <asp:Panel runat="server" id="PanelConfirmLightBox" Visible="false"></asp:Panel>
</form>
</body>
</html>

【问题讨论】:

  • 您的意思是当您单击按钮时,整个更新面板都会消失?以及gridview、按钮等?
  • 没有。更新面板在那里。一切看起来都一样。我的意思是我的确认面板没有出现。当您单击删除链接时,没有任何反应,页面保持原样。链接按钮没有调用操作来显示面板。无论如何,我找到了答案,见下文。

标签: asp.net vb.net gridview updatepanel


【解决方案1】:

感谢大家的帮助。在其他人的帮助下,我得到了答案。答案很简单。我所要做的就是将确认信息连同其他所有内容一起放在更新面板中。

带有修复的缩短版:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:GridView ID="GridView1"...>
            <Columns>....</Columns>
        </asp:GridView>
        <asp:SqlDataSource ...></asp:SqlDataSource>

        <!--- THE CONFIRMATION PANELS INSIDE THE UPDATEPANEL AS SHOWN HERE --->

        <asp:Panel runat="server" ID="PanelConfirmMessage" Visible="false">
        ...
        </asp:Panel>
        <asp:Panel runat="server" id="PanelConfirmLightBox" Visible="false"></asp:Panel>
    </ContentTemplate>
</asp:UpdatePanel>

【讨论】:

    【解决方案2】:

    要从更新面板回发您的 gridview 模板字段控件,您可以在项目的 DataBind 事件后面的代码中将该控件添加到 Trigger 集合中。

    所以尝试添加 OnDataBindingLinkButton

       protected void PostBackBind_DataBinding(object sender, EventArgs e)
    {
       LinkButton lb = (LinkButton) sender;
       ScriptManager sm = (ScriptManager)Page.FindControl("scriptmanagerId");
       sm.RegisterPostBackControl(lb);
    }
    
    
    
    <asp:ScriptManager ID="scriptmanagerId" runat="server"></asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:GridView ID="GridView1" runat="server">
                    <Columns>
                        <asp:templatefield HeaderText="Name">
                            <ItemTemplate><asp:TextBox ID="TextBox1" runat="server" Text='<%#Eval("name") %>' /></ItemTemplate>
                        </asp:templatefield>
                        <asp:TemplateField HeaderText="Delete">
                            <ItemTemplate><asp:LinkButton ID="LinkButtonDelete" runat="server" Text="Delete" OnClick="LinkButtonDelete_Click" OnDataBinding="LinkButtonDelete_DataBinding"></asp:LinkButton></ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </ContentTemplate>
        </asp:UpdatePanel>
    

    【讨论】:

    • 已经试过了。由于它在 GridView 内,因此无法正常工作。 ControlID 未被识别为“LinkBut​​tonDelete”,因为它位于 GridView 中。我认为您必须使用在 html 中呈现的控件名称。而且这个名字并不是唯一的。无论哪种方式,您都不能使用该 ID。
    • 对不起,我不认识 GridView。现在我根据你的问题更新这个。你可以试一次。简单易行的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 2018-06-18
    • 1970-01-01
    • 2017-01-06
    • 2018-08-04
    • 1970-01-01
    相关资源
    最近更新 更多