Свойство управления пользователем теряется после обратной передачи
Это 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; }
}