【发布时间】:2019-03-20 17:39:27
【问题描述】:
我正在将项目从 Net MVC 迁移到 MVC Core 2。
如何在 Sessions 中设置 IQueryable? 在 Net MVC 中是这样的,
public ActionResult CurrentOwners_Read([DataSourceRequest]DataSourceRequest request, int propertyID)
{
if (propertyID == 0)
{
throw new ArgumentNullException("propertyID");
}
IQueryable<PropertyOwnerRoleViewModel> allResult = (IQueryable<PropertyOwnerRoleViewModel>)HttpContext.Session.GetString(_currentOwnersResult).AsQueryable();
if (allResult == null)
{
PropertyOwnerManager propertyOwnerManager = new PropertyOwnerManager();
allResult = propertyOwnerManager.GetPropertyOwnershipSummary(propertyID).AsQueryable();
Session.Add(_currentOwnersResult, allResult);
}
上面的最后一行给出了错误:
The name 'Session' does not exist in the current context
_currentOwnersResult 是字符串 AllResult 是 IQueryable
当尝试在 MVC Core 中转换时,以下也不起作用
HttpContext.Session.SetString(_currentOwnersResult, allResult);
错误代码:
cannot convert from 'System.Linq.IQueryable<HPE.Kruta.Model.PropertyOwnerRoleViewModel>' to 'string'
【问题讨论】:
-
IQueryable 是一个尚未运行的查询,而不是需要存储的数据。即使在 MVC 中。我希望一个名为
allResult的变量无论如何都包含查询的results,而不是查询本身。也许实际类型是 IEnumerable? -
你为什么要这样做?
-
@JoeSmith 它在那里也不起作用。这不是语法问题。
allResult是如何创建的? -
@JoeSmith 至于 context 和 session,1)
does not work是什么意思? 2) 你在哪里找到HttpContext?在 ASP.NET Core MVC 中,上下文不再是单例对象,而是注入到构造函数中。这也允许轻松测试控制器。在最新的 Razor Pages 中,它又是一个单例,但更容易测试 -
@JoeSmith 你检查过Session and app state in ASP.NET Core 吗?你有configured the session state吗?
标签: c# asp.net-core .net-core asp.net-core-mvc .net-core-2.0