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