2013-02-19 34 views
15

這是HTML。我有一個包含用戶控件的中繼器。用戶控件的屬性在回發後丟失值

<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的是,我的用戶控制內定義的一個屬性。

int departmentID; 

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

而且這是我正在試圖訪問它

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

頁面加載後的第一次,DepartmentID的有一個值。但是,當頁面回帖時,該值始終爲。

回答

21

所有變量(和控制)設置在頁面的生命週期結束。所以你需要一種方法來保存你的變量,例如在ViewState

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

MSDN雜誌文章「九選項在ASP.NET應用程序管理永久性用戶狀態」是有用的,但它不再是MSDN網站上查看。它在2003年4月版,您可以download as a Windows Help file (.chm)。 (不要忘記調出屬性並解除阻止「這是從互聯網上下載」的東西,否則你將無法查看文章。)

+0

是有道理的。我在全班使用變量departmentID。我用什麼來代替?該屬性即DepartmentID? – Richard77 2013-02-19 14:48:18

+1

@ Richard77:是的,這就是爲什麼你應該偏好屬性而不是字段。您可以稍後更改實施。使字段始終保密。 – 2013-02-19 14:49:31

+0

合理。難怪,瞭解ASP.NET頁面的生命週期是面試過程中的首要問題之一。非常感謝。 – Richard77 2013-02-19 16:44:37

3

更改您的財產使用ViewState的

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

如果'ViewState [「departmentID」]'null 。編輯:編輯後它仍然會吹;) – 2013-02-19 14:46:55