1

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

4

2 回答 2

1

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

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

如上所述,使用ChildrenAsTriggers也是可能的,但通常将其设置为 false 以进行更严格的管理。

于 2013-04-22T11:06:24.463 回答
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>

我不得不将 OnRowDataBound="gvSearchResult_RowDataBound" 放在 gridView 上,该函数如下所示。所以我不得不将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)
            {

            }
        }
于 2013-04-22T13:05:38.027 回答