为什么我的自定义服务器控件不维护视图状态信息?

时间:2012-01-08 13:52:46

标签: c# asp.net .net custom-controls

我正在创建一个自定义服务器控件。这是相关的自定义控件:

    public class ManagementUserControl : UserControl
    {
        GridView _grv;

        public ManagementUserControl()
        {
            _grv = new GridView();
        }

        /// <summary>
        /// binds the grid to controls.
        /// </summary>
        public override void DataBind()
        {
            _grv.DataBind();
        }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            if (!IsPostBack)
            {
    //add controls only when is not postback
                InitializeGrid(); 
            }
        }
        void InitializeGrid()
        {
            this.Controls.Add(_grv);
        }
        [Browsable(true), EditorBrowsable(EditorBrowsableState.Always)]
        public object DataSource
        {
            get { return _grv.DataSource; }
            set { _grv.DataSource = value; }
        }
    }

我在Default.aspx后面的代码中添加数据源对象,如下所示:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<string> lst = new List<string>();
            lst.Add("test1");
            lst.Add("test2");
            lst.Add("test3");
            ucManagement.DataSource = lst;
            ucManagement.DataBind();
        }
    }

首先,它工作正常,但当我回发页面控件消失。所以我在Load事件中检查了Conrols集合,发现它是空的。更糟糕的是,grid.DataSource在回发时为空! 为什么不维护gridview的视图状态并且回发时数据源值丢失?顺便说一下,在页面或web.config文件中的任何地方都没有关闭视图状态。

1 个答案:

答案 0 :(得分:0)

在asp.net网站上找到了this。似乎是你的确切场景。