Свойство управления пользователем теряется после обратной передачи

Это 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 имеет значение. Однако, когда страница Posts back, это значение всегда 0.

Ответы

Ответ 1

Все переменные (и элементы управления) расположены в конце жизненного цикла страницы. Таким образом, вам нужен способ сохранения вашей переменной, например. в 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 года, который вы можете скачать как файл справки Windows (.chm). (Не забудьте открыть свойства и разблокировать "это было загружено из Интернета", иначе вы не сможете просмотреть статьи.)

Ответ 2

Измените свойство, чтобы использовать viewstate

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