syncfusion-aspnetcore-query-builder
Implementing QueryBuilder in ASP.NET Core
The Syncfusion QueryBuilder is a UI component for creating and editing filter conditions visually. Users can define rules and groups, combine them with AND/OR connectors, and export them as JSON, SQL, or MongoDB queries — all using ASP.NET Core TagHelper syntax.
Navigation Guide
Getting Started
📄 Read: references/getting-started.md
- NuGet package installation and TagHelper setup
- CDN stylesheet and script references
- Basic QueryBuilder with columns
- Render with initial Rule (JSON)
- EmployeeView model class example
Column Configuration
📄 Read: references/columns.md
- Auto-generating columns from DataSource
- Labels, field mapping, data types
- Operators table (all supported types)
- Number step and date/number format
- Validation (isRequired, min, max)
- Column-level custom input templates
Data Binding
📄 Read: references/data-binding.md
- Local data binding (JSON array, DataManager)
- Remote data (OData, ODataV4, WebAPI, UrlAdaptor)
- Using getPredicate to filter data
- Grid integration via ruleChange event
Import & Export
📄 Read: references/import-export.md
- Import from JSON (initial Rule / setRules)
- Import from SQL (Inline, Parameter, Named Parameter)
- Import from MongoDB (setMongoQuery)
- Export to JSON (getRules)
- Export to SQL variants and MongoDB
Filtering & Rule Management
📄 Read: references/filtering-and-rules.md
- ShowButtons configuration (ruleDelete, groupInsert, groupDelete, clone, lock)
- addRules / deleteRules / addGroups / deleteGroups methods
- cloneGroup / cloneRule methods
- lockGroup / lockRule methods
- EnableSeparateConnector between rules
- EnableNotCondition for NOT groups
Templates & Appearance
📄 Read: references/templates-and-appearance.md
- Header template customization
- Display mode (Horizontal / Vertical)
- Summary view (collapsed read-only display)
- Model binding (fieldModel, operatorModel, valueModel)
- CSS classes for styling customization
Configuration & How-To
📄 Read: references/configuration-and-how-to.md
- Drag and drop (AllowDragAndDrop, events)
- MaxGroupCount to restrict nested groups
- SortDirection for column field ordering
- EnablePersistence (state saved in localStorage)
- EnableRtl for right-to-left languages
- ReadOnly mode, Width/Height, CssClass
- AutoSelectField, AutoSelectOperator, MatchCase
Localization
📄 Read: references/localization.md
- Setting the Locale property
- Full locale key reference table
- Example: Arabic / RTL localization
API Reference
📄 Read: references/api.md
- Complete properties with types and defaults
- All events with descriptions
- QueryBuilderColumn sub-properties
- QueryBuilderShowButtons sub-properties
- TagHelper attribute naming conventions
Quick Start Example
@* _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>
Common Patterns
Render with Initial Rule
@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>
Export Rules to SQL
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);
Grid Integration with QueryBuilder
// 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();
}
Drag and Drop Enabled
<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>
Key Properties Quick Reference
| Property | TagHelper Attribute | Purpose |
|---|---|---|
Columns |
e-querybuilder-columns |
Define filterable fields |
Rule |
rule="rule" |
Initial rule — C# QueryBuilderRule object |
DataSource |
dataSource |
Bind local/remote data |
AllowDragAndDrop |
allowDragAndDrop |
Enable rule reordering |
AllowValidation |
allowValidation |
Validate rule inputs |
EnableSeparateConnector |
enableSeparateConnector |
Per-rule AND/OR connectors |
EnableNotCondition |
enableNotCondition |
NOT group operator |
MaxGroupCount |
maxGroupCount |
Limit nested group depth |
SummaryView |
summaryView |
Show collapsed rule summary |
DisplayMode |
displayMode |
Horizontal or Vertical layout |
EnablePersistence |
enablePersistence |
Save state to localStorage |
EnableRtl |
enableRtl |
Right-to-left layout |
SortDirection |
sortDirection |
Sort column field list |
Readonly |
readonly |
Disable all interactions |
Width / Height |
width / height |
Component dimensions |
Common Use Cases
- Data grid filter UI → QueryBuilder + Grid integration via
ruleChange - Save/restore conditions →
getRules+setRuleswith localStorage or backend - SQL WHERE clause builder →
getSqlFromRules/getParameterizedSql - MongoDB filter →
getMongoQuery/setMongoQuery - Read-only filter display →
summaryView="true"+readonly="true" - Mobile-friendly layout →
displayMode="Vertical"+maxGroupCount="2" - Localized UI →
localeproperty + L10n translation object
Security & Trust Boundary
External Dependency: CDN-Based JavaScript Execution
The Syncfusion QueryBuilder requires runtime execution of external JavaScript from the official CDN endpoint (https://cdn.syncfusion.com/ej2/*/dist/ej2.min.js). This is a required trusted dependency with the following security considerations:
Risk Mitigation Strategies
-
Use HTTPS Only
- Always reference CDN resources via HTTPS to prevent man-in-the-middle attacks
- Verify your layout template uses
https://scheme
-
Subresource Integrity (SRI)
- Include SRI hash attributes to validate script integrity:
<script src="https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2.min.js" integrity="sha384-[HASH]" crossorigin="anonymous"></script> -
Content Security Policy (CSP)
- Add Syncfusion CDN to your CSP whitelist:
script-src 'self' https://cdn.syncfusion.com; style-src 'self' https://cdn.syncfusion.com; -
Vendor Lock & Trust Assessment
- Trusted Vendor: Syncfusion is an established commercial component vendor with industry adoption
- No Open-Source Alternatives: QueryBuilder functionality is specialized; evaluate internal development costs vs. vendor dependency
- Consider Bundling: For enhanced control, bundle Syncfusion scripts locally instead of using CDN (download and host on your own domain)
-
Version Pinning
- Always pin the specific version instead of using wildcard versions:
❌ https://cdn.syncfusion.com/ej2/latest/dist/ej2.min.js ✅ https://cdn.syncfusion.com/ej2/23.1.43/dist/ej2.min.js -
Update Management
- Regularly update Syncfusion NuGet packages and verify corresponding CDN versions match
- Subscribe to Syncfusion security announcements
- Test updates in staging environment before production deployment
Acceptable Risk Assessment
- Severity: Medium (requires trust boundary evaluation at deployment)
- Mitigation: Implement SRI + CSP + version pinning
- Approval: Obtain security team sign-off for use in compliant applications
Start here: Read references/getting-started.md to set up your first QueryBuilder.
More from syncfusion/aspnetcore-ui-components-skills
syncfusion-aspnetcore-charts
Implements Syncfusion ASP.NET Core Chart (SfChart) for data visualization. Use this when building charts, visualizing time-series or categorical data, or creating dashboards. Covers series configuration (line, bar, pie), axes, tooltips, legends, and customization for ASP.NET Core applications.
11syncfusion-aspnetcore-textbox
Complete guide to implementing the Syncfusion TextBox component in ASP.NET Core applications with tag helpers, validation, floating labels, and adornments for building accessible input forms.
11syncfusion-aspnetcore-list-box
Implement and configure Syncfusion ASP.NET Core ListBox component with selection controls. Use this when building selection interfaces with single/multiple modes, data binding, or advanced features. Covers ListBox implementation, selection state management, appearance customization, and user interaction handling.
10syncfusion-aspnetcore-common
**CONFIGURATION GUIDE** — Assist with Syncfusion ASP.NET Core EJ2 components setup, localization, and version compatibility. Use when: installing Syncfusion packages, configuring globalization/localization, selecting compatible versions.
10syncfusion-aspnetcore-rich-text-editor
Implements the Syncfusion ASP.NET Core Rich Text Editor (ejs-richtexteditor tag helper) supporting HTML (WYSIWYG) and Markdown editing modes. Set editorMode='Markdown' for Markdown; default is HTML. Use this skill for toolbar configuration, image upload, table editing, inline or iframe mode, AI assistant integration, mentions, and form validation with rich text in ASP.NET Core projects.
10syncfusion-aspnetcore-theme
**THEMING & APPEARANCE GUIDE** — Assist with Syncfusion ASP.NET Core EJ2 component theming, customization, size modes, and dynamic theme switching. Use when: applying themes (Bootstrap, Material, Tailwind, Fluent, etc.), customizing theme variables, implementing theme switchers, enabling touch mode, or customizing icons and appearance.
10