0

我正在尝试将 Query 的结果存储在 a 中Session以传递给PageIndexChanging事件。

当我运行查询时,我得到了异常cannot access disposed object

当我绑定网格时,我将查询添加到Session

pnl_results.Visible = true;
ResultsGridView.DataSource = result;
ResultsGridView.DataBind();

Session["ResultQuery"] = result;

然后我尝试在PageIndexChanging活动中使用它

protected void ResultsGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    var gridResult = Session["ResultQuery"].ToString();
    ResultsGridView.PageIndex = e.NewPageIndex;
    ResultsGridView.DataSource = gridResult;
    ResultsGridView.DataBind();
}

如何设置Session以便我可以在PageIndexChanging活动中使用它

4

3 回答 3

3

保留result.ToList()而不是result.

当您存储 LINQ 查询的输出时,您实际上是在存储IEnumerable<T>or IQueryable<T>,这只是应该运行的查询的定义。每次迭代结果时,整个查询都会运行,因此底层数据(可能是 EntityFramework 数据上下文)需要可用,但可能不可用。通过调用ToList()结果,您可以实现查询并缓存结果。现在你有一个List<T>对原始查询一无所知的。它只是结果的数据。

于 2013-03-11T13:54:56.423 回答
2

我认为错误是您将 IQueryable 存储在会话中而不是实际结果中,请在存储结果之前尝试执行 ToList() 或类似操作;

于 2013-03-11T13:54:36.053 回答
0

(T)Session["ResultQuery"]通用喜欢使用请。

样品使用;

protected void ResultsGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    // var gridResult = Session["ResultQuery"].ToString();
    var gridResult = (Product)Session["ResultQuery"];
    ResultsGridView.PageIndex = e.NewPageIndex;
    ResultsGridView.DataSource = gridResult;
    ResultsGridView.DataBind();
}
于 2013-03-11T14:10:10.877 回答