Loading...
Loading...
Complete guide to implementing the Syncfusion QueryBuilder component in ASP.NET Core applications. Use this when working with visual query/filter builders, rule-based filtering UI, SQL/JSON/MongoDB query generation, drag-and-drop rule reordering, or import/export of filter conditions using Syncfusion EJ2 TagHelpers.
npx skill4agent add syncfusion/aspnetcore-ui-components-skills syncfusion-aspnetcore-query-builder@* _ViewImports.cshtml must have: @addTagHelper *, Syncfusion.EJ2 *@
<ejs-querybuilder id="querybuilder" width="70%">
<e-querybuilder-columns>
<e-querybuilder-column field="EmployeeID" label="Employee ID" type="number"></e-querybuilder-column>
<e-querybuilder-column field="FirstName" label="First Name" type="string"></e-querybuilder-column>
<e-querybuilder-column field="Title" label="Title" type="string"></e-querybuilder-column>
<e-querybuilder-column field="HireDate" label="Hire Date" type="date" format="dd/MM/yyyy"></e-querybuilder-column>
<e-querybuilder-column field="Country" label="Country" type="string"></e-querybuilder-column>
</e-querybuilder-columns>
</ejs-querybuilder>@using Syncfusion.EJ2.QueryBuilder
@{
QueryBuilderRule rule = new QueryBuilderRule()
{
Condition = "and",
Rules = new List<QueryBuilderRule>()
{
new QueryBuilderRule { Label = "First Name", Field = "FirstName", Type = "string", Operator = "startswith", Value = "Nancy" },
new QueryBuilderRule { Label = "Country", Field = "Country", Type = "string", Operator = "equal", Value = "USA" }
}
};
var dataSource = EmployeeView.GetAllRecords();
}
<ejs-querybuilder id="querybuilder" width="70%" rule="rule" dataSource="dataSource">
<e-querybuilder-columns>
<e-querybuilder-column field="EmployeeID" label="Employee ID" type="number"></e-querybuilder-column>
<e-querybuilder-column field="FirstName" label="First Name" type="string"></e-querybuilder-column>
<e-querybuilder-column field="Country" label="Country" type="string"></e-querybuilder-column>
</e-querybuilder-columns>
</ejs-querybuilder>var queryBuilder = ej.base.getInstance(document.getElementById("querybuilder"), ejs.querybuilder.QueryBuilder);
// Get JSON rules
var jsonRules = queryBuilder.getRules();
// Get Inline SQL
var sql = queryBuilder.getSqlFromRules(jsonRules);
// Get Parameterized SQL
var paramSql = queryBuilder.getParameterizedSql(jsonRules);// In ruleChange event handler:
function ruleChanged(args) {
var qryBldrObj = ej.base.getInstance(document.getElementById("querybuilder"), ejs.querybuilder.QueryBuilder);
var gridObj = ej.base.getInstance(document.getElementById("Grid"), ejs.grids.Grid);
gridObj.query = qryBldrObj.getDataManagerQuery(qryBldrObj.getRules());
gridObj.refresh();
}<ejs-querybuilder id="querybuilder" allowDragAndDrop="true" width="70%">
<e-querybuilder-columns>
<e-querybuilder-column field="FirstName" label="First Name" type="string"></e-querybuilder-column>
<e-querybuilder-column field="Country" label="Country" type="string"></e-querybuilder-column>
</e-querybuilder-columns>
</ejs-querybuilder>| Property | TagHelper Attribute | Purpose |
|---|---|---|
| | Define filterable fields |
| | Initial rule — C# |
| | Bind local/remote data |
| | Enable rule reordering |
| | Validate rule inputs |
| | Per-rule AND/OR connectors |
| | NOT group operator |
| | Limit nested group depth |
| | Show collapsed rule summary |
| | Horizontal or Vertical layout |
| | Save state to localStorage |
| | Right-to-left layout |
| | Sort column field list |
| | Disable all interactions |
| | Component dimensions |
ruleChangegetRulessetRulesgetSqlFromRulesgetParameterizedSqlgetMongoQuerysetMongoQuerysummaryView="true"readonly="true"displayMode="Vertical"maxGroupCount="2"localehttps://cdn.syncfusion.com/ej2/*/dist/ej2.min.jshttps://<script src="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2.min.js"
integrity="sha384-[HASH]"
crossorigin="anonymous"></script>script-src 'self' https://cdn.syncfusion.com;
style-src 'self' https://cdn.syncfusion.com;❌ https://cdn.syncfusion.com/ej2/latest/dist/ej2.min.js
✅ https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2.min.jsundefined