0

クエリの結果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() または simular を実行してみてください。

于 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 に答える