Asp.net 以编程方式将PagedControl ID分配给DataPAger
因此,我认为,我正在努力解决的更多是页面生命周期/视图状态问题。我有一个包含三个ListView控件的页面。任何时候都只能看到一个。我想使用单个DataPager,通过编程将DataPager的PagedControlID分配给可见ListView的ID。可能需要指出的是,DataPager包含在用户定义的用户控件(ASCX)中,它主要只是传递给DataPager 这个错误似乎很简单Asp.net 以编程方式将PagedControl ID分配给DataPAger,asp.net,viewstate,page-lifecycle,datapager,Asp.net,Viewstate,Page Lifecycle,Datapager,因此,我认为,我正在努力解决的更多是页面生命周期/视图状态问题。我有一个包含三个ListView控件的页面。任何时候都只能看到一个。我想使用单个DataPager,通过编程将DataPager的PagedControlID分配给可见ListView的ID。可能需要指出的是,DataPager包含在用户定义的用户控件(ASCX)中,它主要只是传递给DataPager 这个错误似乎很简单 [InvalidOperationException: No IPageableItemContainer wa
[InvalidOperationException: No IPageableItemContainer was found. Verify that either the DataPager is inside an IPageableItemContainer or PagedControlID is set to the control ID of an IPageableItemContainer.]
System.Web.UI.WebControls.DataPager.LoadControlState(Object savedState) +628838
System.Web.UI.Control.LoadControlStateInternal(Object savedStateObj) +137
System.Web.UI.Page.LoadAllState() +342
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2533
以下是当前事件的顺序
public String ActiveListID
{
get { return (String)ViewState["ActiveListID"]; }
set { ViewState["ActiveListID"] = value; }
}
G基于堆栈跟踪,在加载视图状态之前调用的
加载控制状态期间抛出InvalidOperationException
。如果不以声明方式(在.ascx中)设置PagedControlID
,则在页面生命周期的这一点上,它仍然是一个空字符串
MSDN库示例在一个重要方面不同于您的代码:DataPager
正在动态构造、初始化并添加到页面中LoadControlState
在将DataPager
添加到页面之前不会被调用,此时已初始化PagedControlID
ASP.NET团队似乎并不打算支持动态设置的PagedControlID
属性。我想您唯一可以尝试的是模拟MSDN库示例并动态添加DataPager
。很抱歉响应太慢。。。我确实采纳了你的建议,虽然它对我并不完全有效,但它是正确的道路。我遇到的问题是DataPager控件是另一个UserControl的一部分,它以一种不允许我在正确的时间动态添加它的方式管理页面生命周期。考虑到您的建议,我将有机会重新编写此UserControl。再次感谢!
public String ActiveListID
{
get { return (String)ViewState["ActiveListID"]; }
set { ViewState["ActiveListID"] = value; }
}