syncfusion-aspnetcore-kanban
Original:🇺🇸 English
Translated
Guide for implementing the Syncfusion ASP.NET Core Kanban component using Tag Helper syntax. Use this skill when building task boards, configuring columns and swimlanes, or enabling drag-and-drop. Covers card settings, dialogs, and binding remote data for ASP.NET Core MVC and Razor Pages.
29installs
Added on
NPX Install
npx skill4agent add syncfusion/aspnetcore-ui-components-skills syncfusion-aspnetcore-kanbanTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →Implementing Syncfusion ASP.NET Core Kanban
Table of Contents
- Quick Start
- When to Use This Skill
- Documentation and Navigation Guide
- Common Patterns
- Key Properties Reference
- Data Model
Quick Start
csharp
// HomeController.cs
public IActionResult Index()
{
ViewBag.data = new KanbanDataModels().KanbanTasks();
return View();
}html
<!-- Index.cshtml -->
<ejs-kanban id="Kanban" keyField="Status" dataSource="@ViewBag.data">
<e-kanban-columns>
<e-kanban-column headerText="To Do" keyField="Open"></e-kanban-column>
<e-kanban-column headerText="In Progress" keyField="InProgress"></e-kanban-column>
<e-kanban-column headerText="Testing" keyField="Testing"></e-kanban-column>
<e-kanban-column headerText="Done" keyField="Close"></e-kanban-column>
</e-kanban-columns>
<e-kanban-cardsettings headerField="Title" contentField="Summary"></e-kanban-cardsettings>
</ejs-kanban>Prerequisites:
- NuGet:
Install-Package Syncfusion.EJ2.AspNet.Core - :
_ViewImports.cshtml@addTagHelper *, Syncfusion.EJ2 - : Fluent CSS +
_Layout.cshtmlCDN links +ej2.min.js<ejs-scripts></ejs-scripts>
→ For full setup details, see references/getting-started.md
When to Use This Skill
Use this skill when you need to:
- Build a Kanban board — multi-column workflow visualization
- Configure columns — single/multi-key columns, stacked headers, toggle, drag
- Add swimlanes — group cards by team, user, or category with frozen rows
- Enable drag-and-drop — between columns, swimlanes, or external components
- Implement card dialogs — edit dialog with custom fields, templates, CRUD persistence
- Bind remote data — OData, WebAPI, UrlAdaptor with CRUD operations
- Apply sorting — by index, data source order, or custom field
- Set card priorities — exact-position drop ordering via numeric rank field
- Add column constraints — min/max card count validation per column
- Show tooltips — default or template-based hover tooltips
- Enable virtual scrolling — handle large datasets (100k+ cards) efficiently
- Configure accessibility — WCAG 2.2 AA, keyboard navigation, screen reader support
- Localize or RTL — multi-language support and right-to-left layout
- Filter or search cards — using the property
query - Change columns dynamically — update column configuration at runtime
- Handle events — react to card clicks, drags, dialog open/close, data binding, and more
- Call methods programmatically — add/update/delete cards, open dialogs, show/hide columns, refresh the board
- Reference all properties — full list of component and sub-model properties with types and defaults
Documentation and Navigation Guide
Setup and First Board
📄 Read: references/getting-started.md
- NuGet installation and package setup
- Tag Helper registration in
_ViewImports.cshtml - CDN configuration (CSS + JS) in
_Layout.cshtml - Minimal Kanban board with 4 columns
- Basic swimlane quickstart
- License key registration
Data Binding
📄 Read: references/data-binding.md
- Local data binding via
@ViewBag.data - Remote data: OData, ODataV4, WebAPI, UrlAdaptor
- configuration
<e-data-manager> - CRUD operations with ,
insertUrl,updateUrl,removeUrlcrudUrl - Custom adaptor pattern
- event handling
actionFailure - Ajax loading indicator behavior
Cards
📄 Read: references/cards.md
- (mandatory unique card ID)
headerField - — show/hide card header
showHeader - — card body text field
contentField - Card template with jsrender syntax
- — None, Single, Multiple
selectionType - Card color customization via
colorField
Columns
📄 Read: references/columns.md
- Single-key and multi-key mapping
keyField - — column display name
headerText - Column header template
- — collapsible columns
allowToggle - — initial expand/collapse state
isExpanded - Stacked headers ()
<e-kanban-stackedheaders> - Column-level drag ()
allowColumnDragAndDrop - — display card count in header
showItemCount
Swimlanes
📄 Read: references/swimlane.md
- — data field to group by
keyField - — display label field
textField - Swimlane header template
- — sort swimlane rows
sortBy - — enable cross-swimlane card drag
allowDragAndDrop - — display empty swimlane rows
showEmptyRow - — card count per swimlane
showItemCount - — sticky swimlane headers on scroll
enableFrozenRows
Drag and Drop
📄 Read: references/drag-and-drop.md
- Internal column drag (default enabled)
- — disable all drag
allowDragAndDrop="false" - Per-column /
allowDragflagsallowDrop - — restrict allowed column transitions
transitionColumns - Cross-swimlane drag via
swimlaneSettings.allowDragAndDrop - External drag: property
externalDropId - Kanban-to-Kanban drag (event +
dragStop/deleteCard)addCard - Kanban-to-Treeview and Kanban-to-Schedule integration
Card Edit Dialog
📄 Read: references/dialog.md
- Default dialog (double-click card)
- Custom dialog fields via
<e-kanban-dialogsettings fields="..."> - Field types: String, Numeric, TextArea, DropDown, TextBox, Input
- Custom dialog template with EJ2 component initialization
- Preventing dialog open with event +
dialogOpenargs.cancel = true - Programmatic add:
kanbanObj.openDialog('Add', data) - CRUD persistence via UrlAdaptor with server-side class
EditParams
Sorting, Priority, and Validation
📄 Read: references/sorting-priority-validation.md
- with
<e-kanban-sortsettings>,sortBy,fielddirection - values: Index, DataSourceOrder, Custom
sortBy - Priority field: for exact-position drops
<e-kanban-cardsettings priority="RankId"> - Column min/max card count: ,
minCountonmaxCount<e-kanban-column> - Constraint type: Column (default) or Swimlane
- Visual color indication on constraint violation
Tooltip, Style, and Dimensions
📄 Read: references/tooltip-style-dimensions.md
- — hover tooltip on cards
enableTooltip="true" - — custom HTML tooltip template
tooltipTemplate - CSS class reference for all Kanban elements
- Sticky header pattern
- and
width— auto, pixel, percentage valuesheight
Persistence, Localization, and Responsive
📄 Read: references/persistence-localization-responsive.md
- — localStorage state saving
enablePersistence="true" - property +
localescriptej.base.L10n.load() - All locale key names for Kanban strings
- — right-to-left layout
enableRtl="true" - Mobile responsive behavior (swipe, tap-hold, swimlane menu)
Virtual Scrolling and Accessibility
📄 Read: references/virtual-scrolling-accessibility.md
- — on-demand card rendering
enableVirtualization="true" - — fixed height required for virtualization
cardHeight - Server-side parameter handling
KanbanVirtualization - WCAG 2.2 AA compliance table
- WAI-ARIA attributes (,
aria-label,aria-expanded, etc.)aria-selected - Keyboard shortcuts reference
- — disable keyboard interaction
AllowKeyboard="false"
Events
📄 Read: references/events.md
- /
ActionBegin/ActionComplete— lifecycle and error handlingActionFailure - /
CardClick/CardDoubleClick— card interaction hooksCardRendered - /
ColumnDrag/ColumnDragStart— column reorder eventsColumnDrop - /
Created/DataBinding/DataBound— initialization and data eventsDataSourceChanged - /
DialogOpen— intercept or cancel dialog (useDialogClose)args.cancel = true - /
Drag/DragStart— card drag lifecycle (cross-Kanban scenarios useDragStop)DragStop - — customize column cell elements before render
QueryCellInfo
Methods
📄 Read: references/methods.md
- /
AddCard/UpdateCard— CRUD card operationsDeleteCard - /
AddColumn— dynamic column managementDeleteColumn - /
OpenDialog— programmatic dialog controlCloseDialog - /
ShowColumn— toggle column visibilityHideColumn - /
GetCardDetails/GetColumnData/GetSelectedCards— data retrievalGetSwimlaneData - /
ShowSpinner— loading indicator controlHideSpinner - /
Refresh/RefreshHeader— board re-render helpersRefreshUI - /
DataBind/Destroy/AppendTo— component lifecycle utilitiesInject
All Properties Reference
📄 Read: references/properties.md
- Complete list of all root properties with types, defaults, and examples
<ejs-kanban> - Sub-model properties: ,
CardSettings,Columns,SwimlaneSettings,SortSettings,DialogSettingsStackedHeaders - Enum values: ,
ConstraintType,SelectionType,SortOrderBySortDirection
How-To Recipes
📄 Read: references/how-to.md
- Dynamically change columns at runtime
- Filter cards using the property with dropdown
query - Search cards by field values with text input
- Add header double-click event handler
Common Patterns
Swimlane Board with Remote Data
Use when: You need to group cards by user/team and load data from an API endpoint (OData, WebAPI, etc.) instead of a local collection.
html
<ejs-kanban id="Kanban" keyField="Status">
<e-data-manager url="/api/tasks" adaptor="ODataV4Adaptor"></e-data-manager>
<e-kanban-columns>
<e-kanban-column headerText="To Do" keyField="Open"></e-kanban-column>
<e-kanban-column headerText="In Progress" keyField="InProgress"></e-kanban-column>
<e-kanban-column headerText="Done" keyField="Close"></e-kanban-column>
</e-kanban-columns>
<e-kanban-cardsettings headerField="Title" contentField="Summary"></e-kanban-cardsettings>
<e-kanban-swimlanesettings keyField="Assignee" textField="Assignee"></e-kanban-swimlanesettings>
</ejs-kanban>Board with Column Constraints
Use when: You need to enforce WIP (Work-In-Progress) limits — preventing too few or too many cards from stacking in a column.
html
<ejs-kanban id="Kanban" keyField="Status" dataSource="@ViewBag.data">
<e-kanban-columns>
<e-kanban-column headerText="To Do" keyField="Open"></e-kanban-column>
<e-kanban-column headerText="In Progress" keyField="InProgress"
minCount="3" maxCount="5" showItemCount="true"></e-kanban-column>
<e-kanban-column headerText="Done" keyField="Close"></e-kanban-column>
</e-kanban-columns>
<e-kanban-cardsettings headerField="Title" contentField="Summary"></e-kanban-cardsettings>
</ejs-kanban>Board with Card Edit Dialog + CRUD
Use when: Users need to create, edit, or delete cards through a dialog form, with changes persisted to the server via.UrlAdaptor
html
<ejs-kanban id="Kanban" keyField="Status">
<e-data-manager url="/Home/UpdateData" adaptor="UrlAdaptor"
crudUrl="/Home/UpdateData"></e-data-manager>
<e-kanban-columns>
<e-kanban-column headerText="To Do" keyField="Open"></e-kanban-column>
<e-kanban-column headerText="Done" keyField="Close"></e-kanban-column>
</e-kanban-columns>
<e-kanban-cardsettings headerField="Title" contentField="Summary"></e-kanban-cardsettings>
<e-kanban-dialogsettings fields="@ViewBag.dialogFields"></e-kanban-dialogsettings>
</ejs-kanban>Virtual Scrolling Board
Use when: The dataset is large (hundreds to thousands of cards) and rendering all cards at once would cause performance issues.
html
<ejs-kanban id="Kanban" keyField="Status" dataSource="@ViewBag.data"
enableVirtualization="true">
<e-kanban-columns>
<e-kanban-column headerText="To Do" keyField="Open"></e-kanban-column>
<e-kanban-column headerText="In Progress" keyField="InProgress"></e-kanban-column>
<e-kanban-column headerText="Done" keyField="Close"></e-kanban-column>
</e-kanban-columns>
<e-kanban-cardsettings headerField="Title" contentField="Summary"
selectionType="Multiple"></e-kanban-cardsettings>
</ejs-kanban>Key Properties Reference
| Property | Tag | Values | Purpose |
|---|---|---|---|
| | Field name string | Maps cards to columns by status value |
| | | Local data collection |
| | true/false | Virtual scrolling for large data |
| | true/false | Hover tooltip on cards |
| | Template ID string | Custom tooltip HTML template |
| | true/false | Global drag-and-drop toggle |
| | Element ID array | Target IDs for external drop |
| | true/false | Save state to localStorage |
| | Locale string (e.g. | UI string localization |
| | true/false | Right-to-left layout |
| | auto/px/% | Board width |
| | auto/px/% | Board height |
| | true/false | Keyboard navigation toggle |
| | Field name string | Unique card ID field (mandatory) |
| | Field name string | Card body text field |
| | Template ID string | Custom card HTML template |
| | None/Single/Multiple | Card selection mode |
| | Field name string | Numeric rank field for ordering |
| | true/false | Show/hide card header |
| | Status value(s) | Column card filter (single or comma-separated) |
| | Display string | Column title |
| | true/false | Collapsible column |
| | true/false | Initial expand state |
| | Integer | Minimum cards constraint |
| | Integer | Maximum cards constraint |
| | true/false | Show card count badge |
| | true/false | Allow cards to be dragged from column |
| | true/false | Allow cards to be dropped into column |
| | Field name string | Swimlane grouping field |
| | Field name string | Swimlane display label field |
| | Index/DataSourceOrder/Custom | Card sort strategy |
| | Field name string | Field to sort by |
| | Ascending/Descending | Sort direction |
Data Model
The standard class for all examples:
KanbanDataModelscsharp
public class KanbanDataModels
{
public string Id { get; set; }
public string Title { get; set; }
public string Status { get; set; } // Maps to keyField
public string Summary { get; set; } // Card body content
public string Type { get; set; }
public string Priority { get; set; }
public string Tags { get; set; }
public double Estimate { get; set; }
public string Assignee { get; set; } // Used for swimlane grouping
public int RankId { get; set; } // Numeric rank for priority ordering
public string Color { get; set; } // Optional card color field
}