Мне нужно передать некоторые результаты из базы данных. Вместо того, чтобы передать весь набор данных или построенный SQL-запрос, я попытался передать настроенный объект LinqDataSource.
На исходной странице я настраиваю свойства объекта LinqDataSource Где и WhereParameters , используя значения, установленные пользователем для элементов управления, отображаемых на странице (окно поиска, поле со списком и т. Д. .). Я передаю объект, чтобы избежать реконфигурации LinqDataSource на странице получателя.
Но даже несмотря на то, что он нормально работал в моей разрабатываемой системе, после развертывания на выделенном сервере я получил сообщение об ошибке:
Невозможно получить доступ к удаленному объекту.
Имя объекта: «Доступ к DataContext после Dispose.».
На обеих страницах, источника и получателя, объекты 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();