从 2sxc 模块中的剃刀代码更改视觉查询过滤器值

Change Visual Query Filter Value from razor code in 2sxc module

  1. 我想使用 Visual Query 设计器创建查询并包括排序、筛选、缓存和多个 strams。基本复杂查询。

  2. 我知道我可以使用 QueryString 值或 In-Value Provider 参数化值,或者可以在查询中 "hardcoded"。

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

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

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

我得到了这个查询的结果。 但是在这个查询中有一个 "hardcoded" 值例如:"finished" 对于一些过滤器, 我的问题是:

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

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

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

所以是的:您可以更改现有参数(例如更改 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

方案二:注意还有一种方式: 您可以获取查询并对其进行修改,使其不使用参数,而是使用您刚刚提供的值。这可能感觉有点乱,但很清楚发生了什么。 该系统基本上是数据源项目的链接,通常将源 Out["Default"] 连接到 In["Default"]。每个数据源都有不同的类型和不同的属性。

因此您可以获得一个查询数据源,沿着对象导航到正确的数据源对象,将其转换为正确的类型,然后将 filter/parameter 属性 更改为您想要的任何类型需要。不过,这可能需要花很多时间,所以我不推荐它 :)。