我使用的是ListView + DataPager + ObjectDataSource混合。
在实现SelectMethod的ObjectDataSource中,我希望访问PageLoad()事件中的全局变量集(该方法将只返回每页适当的项目数)。尽管变量是在PageLoad()中初始化的,但在SelectMethod中它似乎是空的。我怎么才能改变呢?
<asp:ObjectDataSource ID="ItemsObjectDataSource" runat="server" EnablePaging="True"
SelectMethod="WrapSearchResults" SelectCountMethod="CountSearchResults"
TypeName="Catalogue">
<SelectParameters>
<asp:QueryStringParameter Name="startRowIndex" QueryStringField="page" Type="Int32" DefaultValue="0" />
<asp:Parameter Name="maximumRows" Type="Int32" DefaultValue="10" />
</SelectParameters>
</asp:ObjectDataSource>SearchOption search;
protected void Page_Load(object sender, EventArgs e)
{
search = new SearchOption(SessionParameters.Get(Session).User);
}
public IEnumerable<ResultWrapper> WrapSearchResults(int startRowIndex, int maximumRows)
{
search.Limit = maximumRows; <-- null pointer exception
}发布于 2010-09-10 17:28:25
这是对象数据源的一个常见问题。你必须永远记住这一点:
ODS将通过Reflection,调用指定的方法,而不是对象的特定实例。(除非指定要自己使用的实例)。
该值为null,因为ODS直接调用该方法,而且它从来不是asp.net页面生命周期的一部分。
如果您确实需要这样做,请使全局变量保持静态。
protected **static** SearchOption search; 如果您查看堆栈跟踪,在空异常之前,您应该会看到框架反射调用。这应该会让你知道发生了什么事!
以下是MSDN引用:
http://msdn.microsoft.com/en-us/library/ms227436.aspx
如果对象具有实例方法而不是静态方法(在Visual中共享),ObjectDataSource控件将创建源对象的实例,调用指定的方法,并在单个请求的范围内处理对象实例。因此,您的对象必须是无状态的。也就是说,对象应该在单个请求的范围内获取和释放所有必需的资源。
您可以通过处理ObjectCreating控件的ObjectDataSource事件来控制源对象的创建方式。可以创建源对象的实例,然后将ObjectDataSourceEventArgs类的ObjectDataSourceEventArgs属性设置为该实例。ObjectDataSource控件将使用在ObjectCreating事件中创建的实例,而不是单独创建实例。
发布于 2011-01-04 15:57:15
我也有同样的问题,但我找到了解决办法。
也可以用VB代码处理以下事件
Protected Sub PagingDataSource_ObjectCreating(ByVal sender As Object, ByVal e As ObjectDataSourceEventArgs) Handles PagingDataSource.ObjectCreating
e.ObjectInstance = Me
End Sub通过这种方式,您将定义类的当前实例和整个his变量。这是一项工作,我从自己身上进行了测试。还为ODS定义metod的名称
<asp:ObjectDataSource ID="PagingDataSource" OnObjectCreating="PagingDataSource_ObjectCreating" 发布于 2010-09-10 17:21:04
ASP.NET页面生命周期可能是在数据源初始化之后发生的Page_Load。尝试使用早期事件,如Page_Init或Page_PreInit。
https://stackoverflow.com/questions/3686644
复制相似问题