我需要从数据库中传递一些结果。我没有传递整个数据集或构造的 sql 查询,而是尝试传递 LinqDataSource 配置的对象。
在源页面上,我使用用户在页面上显示的控件(搜索框、组合框等)上设置的值来配置 LinqDataSource 对象属性Where和WhereParameters 。我传递对象以避免接收器页面上的 LinqDataSource 重新配置。
但是,即使它在我的开发系统上运行良好,在将它部署到专用服务器上后,我收到一条错误消息,提示如下:
无法访问已处置的对象。
对象名称:“Dispose 后访问的 DataContext。”。
在源页面和接收者页面上,LinqDataSource 对象都声明为:
<asp:LinqDataSource ID="myLinqDS" runat="server"
ContextTypeName="MyProject.MyDBNamedpace.MyDataContext"
TableName="TheTable"
OrderBy="field1, field2"
</asp:LinqDataSource>
要传递数据源对象,我这样做:
SetLinqDataSourceWhereAndHisParameters(); //just set Where and WhereParameters
Guid guid = Guid.NewGuid();
Session[guid.ToString()] = myLinqDS;
ScriptManager.RegisterStartupScript(this.Page,
typeof(Page),
"Redirect",
String.Format(@"window.open(""{0}"");",
this.ResolveClientUrl("~/PageToDisplayTheData.aspx?guid=" +
System.Web.HttpUtility.UrlEncode(guid.ToString())
),
true);
并在 PageToDisplayTheData.aspx 的代码隐藏中检索:
myLinqDS =
(LinqDataSource)Session[System.Web.HttpUtility.UrlDecode(Request.QueryString[guid])];
aDataList.DataSource = myLinqDS;
aDataList.DataBind();