ascx viewstate null, когда внутри скрытого PlaceHolder
У меня есть пользовательский элемент управления ascx, который предоставляет простое свойство
/// <summary>
/// The currently selected ID, if there is one
/// </summary>
public virtual int? SelectedId
{
get { return (int)ViewState["XXID"]; }
set { ViewState["XXID"] = value; }
}
Элемент управления находится внутри PlaceHolder, и значение читается очень хорошо в методе постблока onclick кнопки под PlaceHolder.
Однако если PlaceHolder visible=false, то ViewState["XXID"] возвращает значение NULL. Если я переключаю PlaceHolder visible=true, то значение возвращается.
<asp:PlaceHolder runat="server" ID="plcCustomer" >
<my:CustomPicker runat="server" ID="cboCustomer" />
</asp:PlaceHolder >
<asp:Button runat="server" ID="btnToggleVisible" onclick="btnToggleVisible_OnClick" text="Toggle visible" />
<asp:Button runat="server" ID="btnGetSelectedId" onclick="btnGetSelectedId_OnClick" text="Get Value" />
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
plcCustomer.SelectedId = 5;
}
protected void btnToggleVisible_OnClick(object sender, EventArgs e)
{
plcCustomer.Visible = !plcCustomer.Visible;
}
protected void btnGetSelectedId_OnClick(object sender, EventArgs e)
{
...
plcCustomer.SelectedId //<== this will be null whenever plcCustomer is invisible
...
}
Я догадываюсь, что страница не потратила время на загрузку состояния моего элемента управления, потому что она не будет видна.
Если так, как я могу указать странице, что она должна загружать состояние пользовательских элементов управления, даже если они находятся в скрытом PlaceHolder?