【问题标题】:Could not be resolved in the current scope or context无法在当前范围或上下文中解析
【发布时间】:2012-08-27 04:49:36
【问题描述】:

'fieldName' 无法在当前范围或上下文中解析。制作 确保所有引用的变量都在范围内,需要架构 已加载,并且正确引用了命名空间。

当我在控制器中声明 _data 时出现该消息:

string orderBy = sidx + " " + sord;
IQueryable<Table> _data;
_data = entities.Table.OrderBy(orderBy).Skip(skip).Take(take);

有什么帮助吗?

【问题讨论】:

  • 您已标记 MVC 4.. 此代码是在视图中还是在您的控制器中?或者……在哪里?另外..您正在尝试 OrderBy 一个字符串..您需要将其设为表达式。事实上,您所有的 LINQ 表达式似乎都是变量。它们是表达式吗?
  • 在 MVC2 中我尝试了这种方式,并且它的工作。这是在我的控制器里。

标签: c# jqgrid asp.net-mvc-4


【解决方案1】:

感谢您的回答,但现在我意识到了...问题是因为我从标头 jqgrid 中的 fieldName 获得的 sidx 参数无法识别表名。然后我尝试这样做,现在它解决了:)

在订单变量中添加it.

string orderBy = "it."+ sidx + " " + sord; IQueryable<Table> _data;
_data = entities.Table.OrderBy(orderBy).Skip(skip).Take(take);

【讨论】:

  • 是的,最常见的是您忘记了 it. 前缀。
【解决方案2】:

最可能的原因是您生成的orderBy 表达式引用了Table 中不可用的字段 - 只需在此行中设置一个断点并检查它的值。

这里有一件重要的事情是,对于 jqGrid(您已使用 jqGrid 标记了您的问题),发送为 sidx 的内容存在一些不一致之处。大多数时候它是来自colModelindex,但有时(例如启用分组时)它可以是name

【讨论】:

  • 我在那里设置了断点,并且已经检查过了。 sidx 的值与我表中的 fieldName 相同。我标记了 jqgrid,因为那个 sidx 是我在缩短标头 jqgrid 时从 jqgrid 获得的参数。
  • @SilverCrow 错误消息显然来自 Linq 表达式,因此那里肯定发生了一些事情。
  • 是的,出现消息是因为:.OrderBy(orderby) ---> .OrderBy("FieldName asc") 如果我使用这样的正常情况:.OrderBy(x=>x.Field ) 这是工作。为什么?
  • @SilverCrow 用这么少的数据很难说清楚。我至少需要知道您正在使用哪个 ORM,以及您将什么用于基于字符串的 OrderBy(动态 LINQ 或其他)。了解有关您的模型和导致问题的属性的一些详细信息也很好(也许我们这里有嵌套属性问题或类似的东西)。没有更多细节,我只能猜测。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
  • 2018-09-27
  • 2021-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多