2009-06-23 6 views
0

건물 호출기 컨트롤에 문제가 있습니다. 내 코드는 동일한 이벤트 핸들러를 사용 LinkButtons의 무리 다음ASP.NET 컨트롤 렌더링 파이프 라인

protected override void CreateChildControls() 
{ 
    base.CreateChildControls(); 

    pnl = new Panel { ID = "NewsPager", CssClass = "NewsPager" }; 
    Controls.Add(ddl); 

    AddPagerControls(); 
} 

AddPagerControls 추가합니다 수 있습니다 :

private void li_Click(object sender, EventArgs e) 
{ 
    selectedValue = ((LinkButton) sender).CommandArgument; 
    AddPagerControls(); 
} 

무엇 이제 어떻게하면 내가 "다음"의 LinkButton을 추가 할 때, 그것은 CommandArgument의 얻을 수 있다는 것입니다 사용하여 올바르게 설정 : 현재 페이지가 2 인 경우의 코드를 디버깅 할 때

var liNext = new LinkButton {ID = "NewsPagerLinkNext", Text = ">", CommandArgument = (int.Parse(value) + 1).ToString()}; 
liNext.Click += new EventHandler(li_Click); 
pnl.Controls.Add(liNext); 

즉, "다음"버튼의 CommandArgument 3이 될 것이다. 그러나 페이지가 렌더링되고 다음 버튼을 클릭하면 페이지 1에서 2로 이동하지만 코드에서는 3으로 설정되어 있어도 항상 2가됩니다. 컨트롤이 렌더링됩니다.

나는 여기서 약간의 손실이 있습니다. CreateChildControls에서 AddPagerControls에 대한 호출을 if (! Page.IsPostBack) {AddPagerControls();}로 변경하려고 시도했지만 이벤트 처리기가 전혀 실행되지 않습니다.

편집 : P.S.I 이벤트 핸들러에서 AddPagerControls 메서드가 호출 될 때 pnl.Controls.Clear()를 수행합니다. 그렇지 않으면 LinkButtons가 두 번 추가됩니다.

편집 : P.P.S. 나는 내가 5 링크를 표시해야하기 때문에 페이지 즉

< <을 < 2 3 4 5 6 7> >>

답변

0

은 내가 이해할 수없는 것은 존재보다 다음 경우 Linkbuttons 각 시간을 추가 할 recaculate 왜 페이징 컨트롤을 항상 재생성해야합니까? "prev"및 "next"링크 버튼이있는 접근 방식을 사용할 수 없었으며 현재보고있는 페이지와 항목의 양 (즉, 개별 속성)을 컨트롤의 viewstate에서 유지 관리 할 수 ​​있습니까? 페이지 크기)?

이벤트 처리기에서 현재 페이지가 currentPageIndex+1 또는 비슷한 것으로 알기 때문에 적절한 처리를 수행합니다. 이전/다음 버튼을 항상 재생성하는 것은 특히 i_Click 핸들러에서 내 관점에서 좋은 접근법이 아니며 이는 또한 문제를 일으킬 수 있습니다.

+0

이미 liNext LinkButton을 항상 가지고 있어도 필요할 때 표시하고 이벤트 처리기에서 CommandArgument 만 설정하면 동일한 링크가 클릭 될 수 있으므로 작업을 중단하면됩니다. 컨트롤은 컨트롤 트리 또는 뭔가 (불가능, 나도 알아 ...) 밖으로 ""작동 중지와 함께 – Colin

+0

당신은 이벤트 처리기가 호출되지 않는다는 것을 의미합니까? – Juri

+0

정확하지는 않지만 이전/다음 링크는 한 번 클릭 한 후에도 계속 가치를 유지할 것이고 동일한 것은 모든 숫자 값에 적용된다는 의미입니다. 호출기는 Sharepoint에서 ObjectDataSource를 사용하는 DataFormWebPart를 페이지하는 데 사용됩니다. 이것이이 컨트롤이 "포괄적"이어야 할 필요가있는 이유입니다. 즉 자체 포함 된 데이터 소스에서 자체를 렌더링합니다. 링크 중 하나를 클릭하면 숫자 링크가 변경되어야한다는 사실에 문제가 있다고 생각합니다. 즉, 컨트롤 트리가 변경되지만 이러한 변경 사항은 페이지에서 렌더링되지 않습니다. – Colin