我正在创建一个自定义服务器控件。下面是相关的自定义控件:
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 event中的Conrols集合,发现它是空的。更糟糕的是,grid.DataSource在回发时为空!为什么网格视图的视图状态不被维护,数据源值在回发时丢失?顺便说一句,视图状态在页面或web.config文件中的任何位置都不会关闭。
发布于 2012-01-08 22:07:40
在asp.net站点上找到了this。看起来这就是你想要的。
https://stackoverflow.com/questions/8778090
复制相似问题