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?

0 ответов

Другие вопросы по тегам