我正在尝试实现 Syncfusion Blazor QueryBuilder 组件来构建动态搜索过滤器。
映射到我的 C# 类模型后,我可以成功地将查询生成器规则存储到我的数据库中。但是,当我尝试将这些规则重新映射回 Syncfusion“RuleModel”类时,我在浏览器中出现以下错误。它似乎是由“操作”和“值”字段上的动态属性类型引起的。
当我收到错误消息时,这些属性具有“ValueKind”元素。当它不存在时,它工作正常(例如,如果我手动创建一个新的 RuleModel())
调用 QueryBuilderObj.SetRules() 方法时,浏览器中的错误..
Error: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot implicitly convert type 'System.Text.Json.JsonElement' to 'string'
at CallSite.Target(Closure , CallSite , Object )
at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
at Syncfusion.Blazor.QueryBuilder.Internal.QueryBuilderRules`1.SetField()
at Syncfusion.Blazor.QueryBuilder.Internal.QueryBuilderRules`1.OnParametersSetAsync()
at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)
客户代码
<SfQueryBuilder TValue="@FilterColumns" @ref="QueryBuilderObj" MaxGroupCount=3>
<QueryBuilderColumns>
<QueryBuilderColumn Field="Status" Label="Status" Type="ColumnType.String"></QueryBuilderColumn>
<QueryBuilderColumn Field="DepartmentCode" Label="DepartmentCode" Type="ColumnType.String"></QueryBuilderColumn>
</QueryBuilderColumns>
</SfQueryBuilder>
<button type="button" @onclick="getRules">Get Rules</button>
@code {
SfQueryBuilder<FilterColumns> QueryBuilderObj;
public class FilterColumns
{
public string Status { get; set; }
public string DepartmentCode { get; set; }
}
[Parameter]
public RuleModel rules { get; set; }
private void getRules()
{
QueryBuilderObj.SetRules(rules.Rules, rules.Condition);
}
}
Syncfusion RuleModel 类
public class RuleModel
{
public RuleModel();
public string Condition { get; set; }
public string Field { get; set; }
public string Label { get; set; }
public bool? Not { get; set; }
public dynamic Operator { get; set; }
public string Type { get; set; }
public dynamic Value { get; set; }
public List<RuleModel> Rules { get; set; }
}
我已经在我的域模型中完全复制了上面的 syncfusion RuleModel 类。
是否有人成功地将 QueryBuilder 规则从 Blazor UI 存储和检索到 C# 模型/类中?
谢谢。