Loading...
Loading...
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.
npx skill4agent add syncfusion/aspnetcore-ui-components-skills syncfusion-aspnetcore-kanban// HomeController.cs
public IActionResult Index()
{
ViewBag.data = new KanbanDataModels().KanbanTasks();
return View();
}<!-- 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>Install-Package Syncfusion.EJ2.AspNet.Core_ViewImports.cshtml@addTagHelper *, Syncfusion.EJ2_Layout.cshtmlej2.min.js<ejs-scripts></ejs-scripts>query_ViewImports.cshtml_Layout.cshtml@ViewBag.data<e-data-manager>insertUrlupdateUrlremoveUrlcrudUrlactionFailureheaderFieldshowHeadercontentFieldselectionTypecolorFieldkeyFieldheaderTextallowToggleisExpanded<e-kanban-stackedheaders>allowColumnDragAndDropshowItemCountkeyFieldtextFieldsortByallowDragAndDropshowEmptyRowshowItemCountenableFrozenRowsallowDragAndDrop="false"allowDragallowDroptransitionColumnsswimlaneSettings.allowDragAndDropexternalDropIddragStopdeleteCardaddCard<e-kanban-dialogsettings fields="...">dialogOpenargs.cancel = truekanbanObj.openDialog('Add', data)EditParams<e-kanban-sortsettings>sortByfielddirectionsortBy<e-kanban-cardsettings priority="RankId">minCountmaxCount<e-kanban-column>enableTooltip="true"tooltipTemplatewidthheightenablePersistence="true"localeej.base.L10n.load()enableRtl="true"enableVirtualization="true"cardHeightKanbanVirtualizationaria-labelaria-expandedaria-selectedAllowKeyboard="false"ActionBeginActionCompleteActionFailureCardClickCardDoubleClickCardRenderedColumnDragColumnDragStartColumnDropCreatedDataBindingDataBoundDataSourceChangedDialogOpenDialogCloseargs.cancel = trueDragDragStartDragStopDragStopQueryCellInfoAddCardUpdateCardDeleteCardAddColumnDeleteColumnOpenDialogCloseDialogShowColumnHideColumnGetCardDetailsGetColumnDataGetSelectedCardsGetSwimlaneDataShowSpinnerHideSpinnerRefreshRefreshHeaderRefreshUIDataBindDestroyAppendToInject<ejs-kanban>CardSettingsColumnsSwimlaneSettingsSortSettingsDialogSettingsStackedHeadersConstraintTypeSelectionTypeSortOrderBySortDirectionqueryUse when: You need to group cards by user/team and load data from an API endpoint (OData, WebAPI, etc.) instead of a local collection.
<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>Use when: You need to enforce WIP (Work-In-Progress) limits — preventing too few or too many cards from stacking in a column.
<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>Use when: Users need to create, edit, or delete cards through a dialog form, with changes persisted to the server via.UrlAdaptor
<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>Use when: The dataset is large (hundreds to thousands of cards) and rendering all cards at once would cause performance issues.
<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>| 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 |
KanbanDataModelspublic 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
}