1

我有一个自定义用户控件 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 内,并且该值在 PlaceHolder 下方按钮的回发 onclick 方法中读取得很好。

但是,如果 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 中?

4

0 回答 0