2013-01-05 1 views
1

ASP.NET 중계기의 바닥 글에 사용할 간단한 페이징 사용자 컨트롤을 만들려고합니다.UserControl이 포스트 백 후에 ViewState를 잃습니다.

사용자가 다음을 클릭 할 때마다 PageCounter를 10 씩 증가시키고 값을 ViewState에 저장하고 싶습니다. 그것은 내가 lbNext 클릭 처음 작동하지만 나중에는 난 아직도 [PersistenceMode(PersistenceMode.Attribute)]하지만 운이 내 속성을 장식하려고했습니다

10 ViewState["PageCounter"]으로 재설정을 점점 null의 유지합니다. 값이 ViewState에 지속되지 않는 이유는 무엇입니까?

ASCX :

<%@ Control Language="C#" EnableViewState="true" AutoEventWireup="true" CodeBehind="Pager.ascx.cs" Inherits="WebApplication6.Pager" %> 
<asp:LinkButton ID="lbPrevious" runat="server" OnCommand="SetPage" CommandArgument="Previous">Previous</asp:LinkButton> 
<asp:TextBox ID="txtPage" runat="server" EnableViewState="true" Enabled="false"></asp:TextBox> 
<asp:LinkButton ID="lbNext" runat="server" OnCommand="SetPage" CommandArgument="Next">Next</asp:LinkButton> 

코드 숨김

편집 :

가 여기 중계기에 호출기 사용자 컨트롤을 추가하는 코드입니다 :

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Repeater.aspx.cs" Inherits="WebApplication6.Repeater" %> 
<%@ Register Src="Pager.ascx" TagName="Pager" TagPrefix="asp" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Repeater control</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:Repeater ID="booksRepeater" runat="server"> 
     <ItemTemplate> 
      <table> 
       <tr> 
        <td> 
         Name:&nbsp;<asp:Label ID="lblName" runat="server" Text='<%# Bind("FirstName") %>' /> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         Surname:&nbsp;<asp:Label ID="lblSurname" runat="server" Text='<%# Bind("LastName") %>' /> 
        </td> 
       </tr> 
      </table> 
      </div> 
     </ItemTemplate> 
     <FooterTemplate> 
      <asp:Pager ID="pager" runat="server" /> 
     </FooterTemplate> 
    </asp:Repeater> 
    </form> 
</body> 
</html> 
+0

'페이저'를 중계기/페이지에 추가하는 코드를 게시 할 수 있습니까? –

+0

확실히 –

+0

편집을 참조하십시오. ASP.NET에서 개발할 때 PersistenceMode를 사용하여 리콜하지 않았습니다. 약간의 인터넷 검색에서보기 상태없이 데이터를 자동으로 유지 관리하는 데 사용되는 것처럼 보입니다 (또는 장면 뒤에서 viewstate/세션 상태를 활용). ASP.NET에서 포스트 백 컨트롤을 다시 작성할 때 이전 값이 자동으로 지속되고 Viewstate의 값이 '0'으로 덮어 쓰기 될 수 있습니다. 'PersistenceMode' 속성을 버리면 어떻게 될까요? 또한, 디버거를 실행하고'setter'가 기대했던 것보다 오래된 데이터로 시작하는지, 순서가 맞는지 확인하십시오. –

답변

1

데이터가 중계기 ("booksRepeater")에 바인딩되면 코드가 표시되지 않습니다. 데이터를 제 때에 묶어 두십시오. 이 문제는 다음과 같이 들릴 수 있습니다 : Maintaining viewstate of a repeater

+0

고마워요. 제 문제를 실제로 해결했습니다. 나는 모든 포스트에 리피터를 리 바인딩 한 것을 깨달았습니다. –

+0

모든 문제가 큰 것은 아닙니다. ;-) 당신이 그것을 발견했기 때문에 기쁜! – Jacco