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