(功能是:使用session在用户控件页面缓存接口数据,使得翻页的时候不用反复调用接口;)//包含用户控件页面的页面: ProcessInfo.aspx
public partial class ProcessInfo : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
PlaceHolder1.Controls.Add(LoadControl("BusinessConfig.ascx"));
PlaceHolder2.Controls.Add(LoadControl("DatabaseConfig.ascx"));
}
......
}
//用户控件页面: BusinessConfig.ascx
public partial class BusinessConfig : System.Web.UI.UserControl
{
protected static int ItemCount = 0;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GetLvInfo();
}
else
{
}
}
protected void GetLvInfo()
{
List<A> a= new List<A>(GetInfo());
Session["A"] = a; //1
ItemCount = a.Count;
}
public int CountAll()
{
return ItemCount;
}
public List<A> BindLv(int startIndex, int maxRows)
{
return BaseDAL<A>.LoadOnePage(Session["A"], startIndex, maxRows); //2
}
}//DataSource代码
<asp:ObjectDataSource ID="ObjDsBusiMonitor" runat="server" SelectMethod="BindLv"
TypeName="SynthesisTraffic.UI.Pages.ProcessManager.BusinessConfig" DataObjectTypeName="SynthesisTraffic.ProcessManager_Ref.ProcessUnit"
EnablePaging="True" MaximumRowsParameterName="maxRows" StartRowIndexParameterName="startIndex"
SelectCountMethod="CountAll"></asp:ObjectDataSource>
加载ProcessInfo.aspx执行顺序:
1.ProcessInfo.aspx的Page_load;
2.BusinessConfig.ascx的page_load; //此时1处Session["A"]获取值
3.DatabaseConfig.ascx的Page)load;然后我再点击进入到BusinessConfig.ascx页面,执行顺序:
1.BusinessConfig.ascx的page_load的else部分;
2.调用ListView数据源的方法:BindLv,此时会报错,因为2处的Session["A"]为null现在的问题是:2处的Seesion["A"]为什么会为null?
各位大侠帮帮忙,试了很多种,比如把Session更换为全局变量、在用户页面ProcessInfo.aspx先获取Seesion然后再在控件页面获取该session、或者给用户控件添加属性,在ProcessInfo.aspx页面给该属性赋值,2处的效果均为null;主要是很不明白为什么Session会消失了请不吝赐教,小女子将非常感谢!
<httpRuntime executionTimeout="100" maxRequestLength="409600" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" enableVersionHeader="true"/>
修改如下:<asp:ObjectDataSource ID="ObjDs" runat="server" SelectMethod="BindLv" TypeName="SynthesisTraffic.UI.Pages.ProcessManager.BusinessConfig" DataObjectTypeName="SynthesisTraffic.ProcessManager_Ref.A"
EnablePaging="True" MaximumRowsParameterName="maxRows" StartRowIndexParameterName="startIndex"
SelectCountMethod="CountAll">
<SelectParameters>
<asp:SessionParameter Name="obj" SessionField="AInfo" Type="Object" />
</SelectParameters>
</asp:ObjectDataSource> <asp:DataPager ID="DataPager1" runat="server" PagedControlID="lvBusiMonitor" PageSize="5">
<Fields>
<asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowNextPageButton="False" ShowPreviousPageButton="False" />
<asp:NumericPagerField NumericButtonCssClass="shoutoutallnumericpager" ButtonType="Button" NextPageText=">>" PreviousPageText="<<" ButtonCount="5" />
<asp:NextPreviousPagerField ButtonType="Button" ShowLastPageButton="True" ShowNextPageButton="False" ShowPreviousPageButton="False" />
</Fields>
</asp:DataPager>对应的SelectMethod:”BindLv“修改为: /// <summary>
///
/// </summary>
/// <param name="obj">数据项</param>
/// <param name="startIndex">第几页</param>
/// <param name="maxRows">每页行数</param>
/// <returns></returns>
public List<A> BindLv(object obj, int startIndex, int maxRows)
{
return BaseDAL<A>.LoadOnePage(obj, startIndex, maxRows);
}
public int CountAll()
{
return ItemCount;
}等于把Seesion当做参数传给了BindLv,这样就可以正确获取该值了!但是又有了新的问题:
大家注意看,这样的objSrc绑定方式其实不太常见的,我是在网上看见的,它的startIndex,maxRows都是直接获取的DataPager的值,DataPager没什么特别设置。现在出现的新错误是:
“ObjectDataSource“ObjDsBusiMonitor”未能找到带参数的非泛型方法“CountAll”: obj。 ”
请问这是为什么呢?