2013-04-22 1 views
1

동일한 UpdatePanel의 눈금에서 사용자 목록을 검색하는 updatePanel에 검색 양식이 있습니다. 각 사용자의 이름은 commandLink입니다. commandLinks를 PostBackTriggers로 만들고 싶습니다. 하지만 내가 할 때 컨트롤로드가 존재하지 않는 pageLoad 시간에 오류가 발생하고 사용자의 그리드가로드 타임에 렌더링되지 않고 아약스 호출을 통해 렌더링되기 때문에 true가됩니다. 어떻게 게시물에 트리거로 아약스 호출을 통해 검색된 표에서 여러 명령 단추를 만들 수있는 아이디어?업데이트 패널의 여러 LinkButton에 대한 PostBackTrigger

답변

1

이벤트 핸들러 내에서 항목을 그리드에 추가 할 때 각 특정 컨트롤에 대한 포스트 백을 등록해야합니다. HTML 선언의 정적 식별자는 본질적으로 자리 표시 자입니다. 그리드에 반복되는 모든 항목이 실제로 동일한 ID). 당신이이 ScriptManager.RegisterAsyncPostBackControl 방법을 사용하여 수행 그들은 동기 포스트 백 대신 비동기 포스트 백을 수행 할 수 있도록

RegisterAsyncPostBackControl 방법은 당신이 트리거로 웹 서버 컨트롤을 등록 할 수 있습니다. UpdatePanel 제어 ChildrenAsTriggers 속성은 (디폴트) 참으로 설정되면, 제어 UpdatePanel 내부 게시 제어 자동 비동기 포스트 컨트롤로 등록된다.

위에서 설명한 것처럼 ChildrenAsTriggers을 사용하는 것도 가능하지만 더 엄격한 관리를 위해 일반적으로 false로 설정됩니다.

+0

시나리오가 약간 다릅니다. 링크가 정상적인 포스트 백이 되길 원할 때 이미 링크가 asyncPostbacks로 작동하고 있습니다. 업데이트 패널 안에 검색 폼과 그리드가 있습니다. 검색 버튼은 검색 데이터를 가져 와서 업데이트 패널에서 표를 채 웁니다. 이제 그리드에는 기본적으로 asyncPostBack 호출 인 링크가 있습니다. 링크를 클릭하면 리다이렉션을위한 일반적인 포스트 백이되도록하면서 Ajax 호출을 전송합니다. 일반적인 게시물에 대한 링크를 어떻게 만들 수 있습니까? 리디렉션을 위해 이러한 링크에서 asyncPostback이 발생하면 실제로 구문 분석 오류가 발생합니다. –

0

해결책을 찾았습니다. 여기 GRIDVIEW에 OnRowDataBound = "gvSearchResult_RowDataBound"를 배치하는 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의 코드이며, 그 기능은 다음과 같습니다. 그래서 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) 
      { 

      } 
     } 
관련 문제