2013-04-22 17 views
1

我有一個updatePanel中的搜索表單,它檢索同一個UpdatePanel中的網格中的用戶列表。每個用戶的名稱都是一個commandLink。我想讓commandLinks成爲PostBackTriggers。 但是當我這樣做的時候,我在pageLoad時候得到一個錯誤,那個controlId不存在並且它是真的,因爲用戶的網格在加載時沒有渲染,而是通過ajax調用。 關於如何使通過ajax調用檢索的網格中的多個命令按鈕作爲回發觸發器的任何想法?PostBackTrigger在更新面板中的多個LinkBut​​tons

回答

1

將項目添加到網格時,在ItemDataBound事件處理程序中,您應該爲每個特定控件註冊回發(HTML聲明中的靜態標識符基本上是佔位符 - 並非網格中重複的所有內容都可以實際具有相同的ID)。你這樣做使用ScriptManager.RegisterAsyncPostBackControl方法:

RegisterAsyncPostBackControl方法使您能夠註冊的Web服務器 管制,觸發器,讓他們執行異步回發 而不是同步回發的。當UpdatePanel控制的 ChildrenAsTriggers屬性被設置爲真 (這是默認值),UpdatePanel 控制內回發控件自動註冊爲異步回發 控件。

如上所述,使用ChildrenAsTriggers也是一種可能性,但對於更嚴格的管理,這通常設置爲false。

+0

我的方案有點不同:)鏈接已經作爲asyncPostbacks工作,而我希望那些是正常的回發。我有更新面板中的搜索表單和網格。搜索按鈕帶來搜索數據並在更新面板中填充網格。現在網格有默認的鏈接,asyncPostBack調用意味着點擊鏈接發送ajax調用,而我希望鏈接是重定向的普通回發。我怎樣才能使鏈接到一個正常的回發? 當這些鏈接上發生asyncPostback重定向時,實際上給了我一個解析錯誤。 – 2013-04-22 12:17:10

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> 

Ihad代碼放置OnRowDataBound =「gvSearchResult_RowDataBound」關於GridView和該功能看起來像下面。所以我必須在GridView的RowDataBound事件中將Scriptmanager中的迭代控件註冊爲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) 
      { 

      } 
     }