2013-02-19 34 views
15

Đây là HTML. Tôi có một bộ lặp có chứa một điều khiển người dùng.Thuộc tính của người dùng kiểm soát mất giá trị sau một postback

<asp:Repeater ID="rpNewHire" runat="server"> 
<HeaderTemplate> 
    <table>    
</HeaderTemplate> 
<ItemTemplate> 
    <tr> 
    <td> 
     <user:CKListByDeprtment ID = "ucCheckList" 
      DepartmentID= '<%# Eval("DepID")%>' 
      BlockTitle = '<%# Eval("DepName")%>' 
      runat = "server"></user:CKListByDeprtment> 
    </td> 
    </tr> 
    </ItemTemplate> 
    <FooterTemplate> 
    </table> 
    </FooterTemplate> 
</asp:Repeater> 

DepartmentID là thuộc tính mà tôi đã xác định bên trong điều khiển người dùng .

int departmentID; 

public int DepartmentID 
{ 
    get { return departmentID; } 
    set { departmentID = value; } 
} 

Và đây là cách tôi đang cố gắng để truy cập vào nó

protected void Page_Load(object sender, EventArgs e) 
{ 
    int test = departmentID; 
} 

Khi tải trang cho lần đầu tiên, departmentID có giá trị. Tuy nhiên, khi trang Bài đăng trở lại, giá trị đó luôn là .

Trả lời

21

Tất cả các biến (và điều khiển) được xử lý vào cuối vòng đời của trang. Vì vậy, bạn cần một cách để duy trì biến của mình, ví dụ: trong số ViewState.

public int DepartmentID 
{ 
    get { 
     if (ViewState["departmentID"] == null) 
      return int.MinValue; 
     else 
      return (int)ViewState["departmentID"]; 
    } 
    set { ViewState["departmentID"] = value; } 
} 

Bài viết trên tạp chí MSDN "Hữu ích, nhưng không còn xem được trên trang web MSDN. Đó là ấn bản tháng 4 năm 2003, bạn có thể download as a Windows Help file (.chm). (Đừng quên đưa lên các thuộc tính và bỏ chặn "điều này đã được tải xuống từ internet", nếu không bạn không thể xem bài viết.)

+0

Có ý nghĩa. Tôi đã sử dụng bộ phận biếnID trên tất cả các lớp. Tôi nên sử dụng cái gì? Tài sản, tức là DepartmentID? – Richard77

+1

@ Richard77: Vâng, đó là lý do tại sao bạn nên chọn các đặc tính trên các trường. Bạn có thể thay đổi việc triển khai sau này. Làm cho các trường luôn riêng tư. –

+0

Có ý nghĩa. Không có thắc mắc, biết vòng đời của trang ASP.NET là một trong những câu hỏi hàng đầu trong cuộc phỏng vấn việc làm. Cảm ơn bạn rất nhiều. – Richard77

3

Thay đổi sở hữu của bạn để sử dụng ViewState

int departmentID = 0; 
public int DepartmentID 
{ 
    get { 
     if(ViewState["departmentID"]!=null) 
     { departmentID = Int32.Parse(ViewState["departmentID"]); }; 
     return departmentID; 
     } 
    set { ViewState["departmentID"] = value; } 
} 
+3

Điều này sẽ phát sinh nếu 'ViewState [" departmentID "]' là null . Chỉnh sửa: nó vẫn sẽ thổi sau khi chỉnh sửa của bạn;) –

Các vấn đề liên quan