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

ответ

21

Все переменные (и управления) расположены в конце жизненного цикла страницы. Таким образом, вам нужен способ сохранения вашей переменной, например. в ViewState.

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

В статье MSDN Magazine «Девять Опции для управления постоянного состояния пользователя в вашем ASP.NET Application» не является полезным, но это больше не доступны для просмотра на веб-сайте MSDN. Это в выпуске за апрель 2003 года, которое вы можете download as a Windows Help file (.chm). (Не забудьте открыть свойства и разблокировать «это было загружено из Интернета», иначе вы не сможете просмотреть статьи.)

+0

Имеют смысл. Я использовал переменную departmentID по всему классу. Что я использую вместо этого? Имущество, т. Е. DepartmentID? – Richard77

+1

@ Richard77: Да, именно поэтому вы должны предпочесть свойства над полями. Вы можете изменить реализацию позже. Делайте поля всегда приватными. –

+0

Имеют смысл. Неудивительно, что знание жизненного цикла страницы ASP.NET является одним из главных вопросов во время собеседования. Огромное спасибо. – Richard77

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 , Изменить: он все равно будет удаляться после вашего редактирования;) –

Смежные вопросы