2012-01-06 3 views
2

테이블 위에 페이지 매김 막대를 구현하려고합니다. 내 페이지에 정적 <ul> 요소가 내 Page_Load 이벤트에서LinkButton CommandName/CommandArgument 설정이 동적으로 추가되었습니다.

<div><center><ul id="topnav" runat="server"></ul></center></div> 

, 나는 페이지 번호와 함께로드하려고 그러나

foreach (int linkpage in linkpages) { 
    HtmlGenericControl li; 
    LinkButton pbut; 
    li = new HtmlGenericControl("li"); 
    pbut = new LinkButton(); 
    pbut.CommandName = "page"; 
    pbut.CommandArgument = linkpage.ToString(); 
    pbut.Text = linkpage.ToString(); 
    li.Controls.Add(pbut); 
    topnav.Controls.Add(li); 
} 

, 컨트롤이 실제로 그것을 이름으로 게시물을 렌더링 할 때 'ctlXX'(여기서 XX는 숫자가 증가 함)이며 인수가 없으므로 페이지 번호를 얻을 수 없습니다. 그러나 .Text 특성은 잘 렌더링됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 이것은 완전히 잘못된 접근입니까?

답변

1

동적으로 단추를 추가하는 경우 Page_Init 메서드에서 수행해야합니다. 그렇지 않으면 컨트롤이 ViewState에 참여하지 않습니다. 문제가 될 수 있습니다. 물론 도움이되지 않을 것입니다.

또한 이름은 사용자가 직접 ID를 지정하지 않았기 때문에 .Net이 단추에 동적으로 지정하는 이름입니다. 이 ID는 Request.Form 컬렉션에 표시되는 ID가 해당 위치에있는 경우 표시됩니다.

하지만 당신의 접근 방식이 정직하지 않다고 생각합니다. 당신이 페이지 매김을 원한다면 GridView 나 ListView 컨트롤과 같은 것을보아야합니다. 그것은 일을하는 것의 표준이 될 것입니다. GridView 페이징은 here을 설명하고 페이지 번호 here을 비롯한 ListView에 대한 일반적인 자습서를 제공합니다.

일반적으로 페이지 매김은 ASP.Net에서 여러 번 해결 된 문제이며 실제로는 재발견하고 싶지 않을 것입니다. 또한 이러한 유형의 그리드 컨트롤을 사용하면 상자에서 정렬과 같은 작업을 수행 할 수 있습니다. 매우 일반적인 요구 사항입니다.

관련 문제