我通过点击menu的菜单项来动态向PlaceHolder中加载.ascx,但我在运行页面地时候,我点击.ascx中的按钮时页面回传,PlaceHolder控件被清空(.ascx不见了)。现在只有在page_load中添加:
if (phModule.Controls.Count == 0 && this.ModulePath != "")
{
Control ctl = Page.LoadControl(this.ModulePath);
this.phModule.Controls.Add(ctl);
}
让页面重新加载.ascx才能看到。
我想问的是:为什么Label的Text能保存状态,PlaceHolder控件中的子控件为什么不能保存状态呢?如果能,那我该怎么做呢?
if (phModule.Controls.Count == 0 && this.ModulePath != "")
{
Control ctl = Page.LoadControl(this.ModulePath);
this.phModule.Controls.Add(ctl);
}
让页面重新加载.ascx才能看到。
我想问的是:为什么Label的Text能保存状态,PlaceHolder控件中的子控件为什么不能保存状态呢?如果能,那我该怎么做呢?
protected void Page_Load(object sender, EventArgs e)
{
this.UserID = "zenglu";
}
protected void Page_Init(object sender, EventArgs e)
{
this.spSelectPicture.ConfigPath = "LogoDefaultDir";
this.Address1.TownVisible = true;
this.ViewList1.QueryID = 2;
spSelectPicture.Colsed += new SelectPictureEventHandler(spSelectPicture_Colsed);
spSelectPicture.SelectedPicture += new SelectPictureEventHandler(spSelectPicture_SelectedPicture);
spSelectPicture.UploadedPicture += new SelectPictureEventHandler(spSelectPicture_UploadedPicture);
this.ViewList1.CommonDelete += new CommonViewEventHandler(ViewList1_CommonDelete);
this.ViewList1.CommonEdit += new CommonViewEventHandler(ViewList1_CommonEdit);
this.ViewList1.CommonView += new CommonViewEventHandler(ViewList1_CommonView); }
不讨论了,支持楼主一下。
而且的确不保存动态加载的控件.
刚才chokobo(),jackwofe() 都说:
Label的Text能保存状态是因为页面初始化的时候label已经存在,只是把text的状态返回回去,而你动态加载的控件再初始化的时候是不存在的,是你运行到代码部分的时候才加上去的。
而且的确不保存动态加载的控件.有什么方法把这个动态加载的控件让它在初始化之前就存在呢?
比如说,先随便往PlaceHolder里面放一个ascx,指定ID="ASCX1",然后动态加载的时候清空PlaceHolder,再加载新的ascx同样指定ID="ASCX1"。
要想保持网页状态,必须把状态回传的给服务器。
将PlaceHolder控件的EnableViewState属性设为true,再试。
参考MSDN的控件状态与视图状态来解决问题。