从 2sxc 模块中的剃刀代码更改视觉查询过滤器值
Change Visual Query Filter Value from razor code in 2sxc module
我想使用 Visual Query 设计器创建查询并包括排序、筛选、缓存和多个 strams。基本复杂查询。
我知道我可以使用 QueryString 值或 In-Value Provider 参数化值,或者可以在查询中 "hardcoded"。
但我的问题是如何从剃须刀代码更改一个或多个此值
例如:
如果我像这样加载现有查询:
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。这是始终在您的查询之前运行的内容。
您应该可以通过
访问和修改词典
- 创建自己的应用程序对象
- 创建自己的配置对象
- 使用自己的配置对象的应用的InitData
- 访问查询
感觉有点复杂,其实还算简单。最好检查应用程序工厂以了解代码:
https://github.com/2sic/2sxc/blob/3602461f3c4154857d84c7f6ad1a3d1e96b78ba3/Environment/Dnn7/Factory.cs
方案二:注意还有一种方式:
您可以获取查询并对其进行修改,使其不使用参数,而是使用您刚刚提供的值。这可能感觉有点乱,但很清楚发生了什么。
该系统基本上是数据源项目的链接,通常将源 Out["Default"] 连接到 In["Default"]。每个数据源都有不同的类型和不同的属性。
因此您可以获得一个查询数据源,沿着对象导航到正确的数据源对象,将其转换为正确的类型,然后将 filter/parameter 属性 更改为您想要的任何类型需要。不过,这可能需要花很多时间,所以我不推荐它 :)。
我想使用 Visual Query 设计器创建查询并包括排序、筛选、缓存和多个 strams。基本复杂查询。
我知道我可以使用 QueryString 值或 In-Value Provider 参数化值,或者可以在查询中 "hardcoded"。
但我的问题是如何从剃须刀代码更改一个或多个此值
例如: 如果我像这样加载现有查询:
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。这是始终在您的查询之前运行的内容。
您应该可以通过
访问和修改词典- 创建自己的应用程序对象
- 创建自己的配置对象
- 使用自己的配置对象的应用的InitData
- 访问查询
感觉有点复杂,其实还算简单。最好检查应用程序工厂以了解代码: https://github.com/2sic/2sxc/blob/3602461f3c4154857d84c7f6ad1a3d1e96b78ba3/Environment/Dnn7/Factory.cs
方案二:注意还有一种方式: 您可以获取查询并对其进行修改,使其不使用参数,而是使用您刚刚提供的值。这可能感觉有点乱,但很清楚发生了什么。 该系统基本上是数据源项目的链接,通常将源 Out["Default"] 连接到 In["Default"]。每个数据源都有不同的类型和不同的属性。
因此您可以获得一个查询数据源,沿着对象导航到正确的数据源对象,将其转换为正确的类型,然后将 filter/parameter 属性 更改为您想要的任何类型需要。不过,这可能需要花很多时间,所以我不推荐它 :)。