【问题标题】:why my custom server control does not maintain the viewstate information?为什么我的自定义服务器控件不维护视图状态信息?
【发布时间】:2012-01-08 13:52:45
【问题描述】:

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

    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 文件中的任何地方都没有关闭视图状态。

【问题讨论】:

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


【解决方案1】:

在 asp.net 网站上找到 this。似乎是您的确切情况。

【讨论】:

    猜你喜欢
    • 2010-09-18
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多