0
  1. 我想用 Visual Query 设计器创建查询,包括排序、过滤、缓存和多个 strams。基本复杂的查询。

  2. 我知道我可以使用 QueryString 值或 In-Value Provider 对值进行参数化,或者可以在查询中“硬编码”。

  3. 但我的问题是如何从剃刀代码中更改一个或多个这些值

例如:如果我像这样加载现有查询:

var q = App.Query["查询名称];

我得到了这个查询的结果。但是在这个查询中有一个“硬编码”值,例如:“完成”对于某些过滤器,我的问题是:

可以将此查询作为模板重用,然后在 razor 代码中更改此硬编码值。类似于使用 QueryString 或 In-Value 令牌,但此值来自 razor 脚本中的一些其他逻辑。

4

1 回答 1

1

这是一个很好的问题,到目前为止没有人问过:)

让我们看一些基础知识:用于查询的值提供者是一个包含值提供者对象的特殊字典。它在访问时创建,并且可以根据需要进行修改,直到您访问查询 - 然后使用包含的属性。

所以是的:您可以更改现有参数(例如更改 QueryString:Id 将提供的内容),也可以添加自己的参数列表,例如 CodeParams:Size。

要了解如何执行此操作,请查看构建配置提供程序的https://github.com/2sic/2sxc/blob/master/SexyContent/DataSources/ConfigurationProvider.cs 。这总是在您的查询之前运行。

您应该能够通过以下方式访问和修改字典

  1. 创建自己的应用程序对象
  2. 创建自己的配置对象
  3. 使用自己的配置对象的应用程序的 InitData
  4. 访问查询

感觉有点复杂,其实挺简单的。最好检查应用程序工厂以了解代码: https ://github.com/2sic/2sxc/blob/3602461f3c4154857d84c7f6ad1a3d1e96b78ba3/Environment/Dnn7/Factory.cs

选项 2:请注意,还有另一种方法:您可以获取查询,并对其进行修改,使其不使用参数,而是使用您刚刚提供的值。这可能会让人感觉有些混乱,但发生的一切都非常清楚。基本上,系统是数据源项的链接,通常将源 Out["Default"] 连接到 In["Default"]。每个数据源都有不同的类型和不同的属性。

因此,您可以获得查询数据源,沿着对象导航到正确的数据源对象,将其转换为正确的类型,然后将过滤器/参数属性更改为您需要的任何内容。不过,这可能需要相当多的摆弄,所以我不推荐它:)。

于 2016-05-19T13:05:12.557 回答