2009-08-11 2 views
2

나는 SQL 쿼리에서 일부 데이터를 표시하는 리피터 한 : 코드 숨김에서ASP.NET은 포스트 백없이 Repeater의 DataSource를 변경합니까?

<asp:Repeater runat="server" ID="damQuickList" OnItemDataBound="damQuickList_OnItemDataBound"> 
    <HeaderTemplate> 
     <ul> 
    </HeaderTemplate> 

    <ItemTemplate> 
     <li><asp:HyperLink runat="server" ID="damAnchor" /></li> 
    </ItemTemplate> 

    <FooterTemplate> 
     </ul> 
    </FooterTemplate> 
</asp:Repeater> 

:

damQuickList.DataSource = (Data.RunSelectQuery("SELECT * FROM Table ORDER BY " + radioButton.Value)); 
damQuickList.DataBind(); 

는 데이터 소스를 변경하고 중계기에 업데이트가 할 수있는 방법이없이, 거기에 페이지에서 AJAX와 같은 포스트 백이 필요합니까? 나는 여기에서 찾은 비동기 컨트롤을 사용하고있다 : http://www.asynccontrols.com/,하지만 IE6/7에서 사용하는 데 문제가있다.

답변

3

ASP.NET AJAX 구성 요소를 사용하십시오. 귀하의 페이지에 ScriptManager를 놓고 귀하의 페이지에 UpdatePanel을 놓으십시오. 업데이트 패널 내에서 ContentTemplate은 중계기를 배치합니다. 빠른 예는 다음과 같이 보일 것이다

...

ASPX 마크 업

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 

     <table> 
      <asp:Repeater ID="Repeater1" runat="server"> 
       <ItemTemplate> 
        <tr> 
         <td> 
          <%# Eval("Data") %> 
         </td> 
        </tr> 
       </ItemTemplate> 
      </asp:Repeater> 
     </table> 

     <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 

    </ContentTemplate> 
</asp:UpdatePanel> 

C# 코드

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Repeater1.DataSource = yourDataSource; 
    Repeater1.DataBind(); 
} 

참고 버튼 뒤에 '새로 고침'당신의 데이터 원본도 콘텐츠 템플릿 안에 있습니다. 희망이 도움이됩니다.

1

오프 주제 : 실제 코드가 아니길 바랍니다. 나는 악의적 인 사용자가 원하는 것을 radioButton.Value 필드에 넣고 SQL-Inject 할 수 있다고 확신한다.

+0

아, 좋은 지적. 그건 내 실제 코드가 아니지만 그것과 매우 비슷합니다. 캐치를 주셔서 감사합니다. SQL 쿼리를 하드 코딩하고 정수를 사용하여 선택합니다. –

0

왕복 여행을 원하십니까? 리피터를 UpdatePanel에 넣을 수 없습니까?

관련 문제