更新面板中多个LinkBut​​ton上的PostBackTrigger

时间:2013-04-22 10:58:15

标签: c# updatepanel

我在updatePanel中有一个搜索表单,它检索同一UpdatePanel中网格中的用户列表。每个用户的名称是commandLink。我想将commandLinks作为PostBackTriggers。 但是当我这样做时,我在pageLoad时出现了一个错误,即controlId不存在而且它是真的,因为用户网格不会在加载时呈现,而是通过ajax调用。 关于如何通过ajax调用检索网格中的多个命令按钮作为回发触发器的任何想法?

2 个答案:

答案 0 :(得分:1)

将项添加到网格时,在ItemDataBound事件处理程序中,您应该为每个特定控件注册回发(HTML声明中的静态标识符基本上是占位符 - 并非所有在网格中重复的内容都可以实际上有相同的ID)。您可以使用ScriptManager.RegisterAsyncPostBackControl方法执行此操作:

  

使用RegisterAsyncPostBackControl方法注册Web   服务器控制为触发器,以便它们执行异步   回发而不是同步回发。当。。。的时候   ChildrenAsTriggers控件的UpdatePanel属性设置为true   (这是默认值),UpdatePanel内的回发控件   控件自动注册为异步回发   控件。

如上所述,使用ChildrenAsTriggers也是可能的,但对于更严格的管理,这通常被设置为假。

答案 1 :(得分:0)

我找到了解决方案。这是asp

上的代码
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
  <ContentTemplate>
  <asp:TextBox ID="txtFirstName" runat="server"></asp:TextBox>
  <asp:Button ID="btnSearch" runat="server" OnClick="btnSearch_Click" Text="Search" />
  <asp:GridView ID="gvSearchResult" runat="server" OnRowCommand="gvSearchResult_RowCommand" 
                                 OnRowDataBound="gvSearchResult_RowDataBound">
    <Columns>
     <asp:TemplateField HeaderText="Name">
        <ItemTemplate>
          <asp:LinkButton ID="lnkbtnDetail" runat="server" CommandArgument='<%# Bind("CNIC") %>' CommandName="Detail">
            <asp:Label ID="lblName" Text='<%# Bind("Employee_Name") %>' runat="server</asp:Label>
           </asp:LinkButton>
         </ItemTemplate>
         <ItemStyle HorizontalAlign="Left" VerticalAlign="Middle"Height="25px"Width="30%" />
      </asp:TemplateField>
</Columns>
</asp:GridView>

我想在gridView上放置OnRowDataBound =“gvSearchResult_RowDataBound”,该函数如下所示。所以我不得不在Scriptmanager中将迭代控件注册为GridView的RowDataBound事件中的PostBackControl。

 protected void gvSearchResult_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            try
            {
                if ((e.Row.RowType == DataControlRowType.DataRow))
                {
                    LinkButton lnkbtnDetail = (LinkButton)e.Row.FindControl("lnkbtnDetail");
                    ScriptManager.GetCurrent(this).RegisterPostBackControl(lnkbtnDetail);
                }
            }
            catch (Exception ex)
            {

            }
        }