ASP.NET - 在Gridview中的LinkButton上添加UpdatePanel触发器

5

我试图更新模态对话框的内容,以下代码适用于我:

<asp:LinkButton ID="updateSomething" runat="server" Text="Update" CausesValidation="false" OnClientClick="openDialog();" onclick="UpdateButton_Click" />

<asp:UpdatePanel ID="upNewUpdatePanel" runat="server">
    <ContentTemplate>
        <asp:Label ID="updateLabel" runat="server"></asp:Label>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="updateSomething" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>

然而,当我尝试将LinkButton放在GridView中时,代码如下:
<asp:GridView ID="grdListUsers" runat="server" AutoGenerateColumns="false" AllowPaging="false" OnRowDataBound="grdRowDefListUsers" CssClass="mGrid" EmptyDataText="No users.">
    <Columns>
        <asp:BoundField DataField="Name" HeaderText="Nome" HeaderStyle-Width="300" />
        <asp:BoundField DataField="Login" HeaderText="Login" HeaderStyle-Width="300" />
        <asp:TemplateField HeaderText="Options" HeaderStyle-Width="75" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle">
            <ItemTemplate>
                <asp:LinkButton ID="updateSomething" runat="server" Text="Update" CausesValidation="false" OnClientClick="openDialog();" onclick="UpdateButton_Click" />
        </asp:TemplateField>
    </Columns>
</asp:GridView>

这个不起作用,我得到了一个错误信息:在UpdatePanel 'upNewUpdatePanel'的触发器中找不到ID为'updateSomething'的控件。

我该如何在GridView中使用ImageButton?


https://dev59.com/MlLTa4cB1Zd3GeqPa36J#25959172 - Iman
4个回答

10

尝试将 asp:AsyncPostBackTrigger 添加到 asp:GridViewOnRowCommand 事件中,并在该事件中处理链接按钮的单击事件。

<asp:GridView ID="grdListUsers" runat="server" onRowCommand="grdListUsers_RowCommand">
     <asp:TemplateField>
           <asp:LinkButton ID="updateSomething" CommandName="update-something" CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>'/>
     </asp:TemplateField>
</asp:GridView>

在 C# 中创建事件的方法如下:

protected void grdListUsers_RowCommand(object sender, GridViewCommandEventArgs e)
{
   if (e.CommandName == "update-something")
   {
      grdListUsers.SelectedIndex = Convert.ToInt32(e.CommandArgument);
   }
}

7
您可以在GridView中添加触发器。
<Triggers>
      <asp:PostBackTrigger ControlID="gridview1" />
</Triggers>

当我这样做时...我会收到“存在多个相同控件”的错误提示。 - Si8
当我这样做时...我会收到“存在多个相同控件”的错误提示。 - undefined

5
请在您的链接按钮周围添加另一个Update Panel,就像下面这样。
<asp:GridView ID="grdListUsers" runat="server" AutoGenerateColumns="false" AllowPaging="false" OnRowDataBound="grdRowDefListUsers" CssClass="mGrid" EmptyDataText="No users.">
    <Columns>
        <asp:BoundField DataField="Name" HeaderText="Nome" HeaderStyle-Width="300" />
        <asp:BoundField DataField="Login" HeaderText="Login" HeaderStyle-Width="300" />
        <asp:TemplateField HeaderText="Options" HeaderStyle-Width="75" ItemStyle-HorizontalAlign="Center" ItemStyle-VerticalAlign="Middle">
            <ItemTemplate>
                <asp:UpdatePanel ID="aa" runat="server">
                    <ContentTemplate>
                        <asp:LinkButton ID="updateSomething" runat="server" Text="Update" CausesValidation="false" OnClientClick="openDialog();" onclick="UpdateButton_Click" />
                    </ContentTemplate>
                    <Triggers>
                        <asp:PostBackTrigger  ControlID="updateSomething"/>
                    </Triggers>
              </asp:UpdatePanel>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

1

您可以将 UpdatePanel 的 UpdateMode 设置为 Conditional,并在 UpdateButton_Click 处理程序中手动 update 它:

<asp:UpdatePanel ID="UdpFormPanel" runat="server" UpdateMode="conditional" ChildrenAsTriggers="false"  >
的Click事件处理程序:
Protected Sub UpdateButton_Click(ByVal sender As Object, ByVal e As EventArgs)
    'blah....
    upNewUpdatePanel.Update()
End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接