Skip to main content

syncfusion-aspnetmvc-chat-ui

Implement a real-time Chat UI with Syncfusion ASP.NET MVC ChatUI component. Use when building chat interfaces, messaging apps, bot integrations, or interactive conversations. Covers messages, header/footer, templates, events, methods, file attachments, typing indicators, mentions, globalization, speech-to-text, and bot integrations.

Source facts

Repository
syncfusion/aspnetmvc-ui-components-skills
Last source activity
July 17, 2026 at 07:09
Detected SKILL.md language
English
Stars
0
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
11 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
syncfusion-aspnetmvc-chat-ui
description
Implement a real-time Chat UI with Syncfusion ASP.NET MVC ChatUI component. Use when building chat interfaces, messaging apps, bot integrations, or interactive conversations. Covers messages, header/footer, templates, events, methods, file attachments, typing indicators, mentions, globalization, speech-to-text, and bot integrations.
metadata
{"author":"Syncfusion Inc","version":"34.1.29"}
# Syncfusion ASP.NET MVC Chat UI The Syncfusion ASP.NET MVC Chat UI (`Syncfusion.EJ2.InteractiveChat.ChatUI`) is a feature-rich conversational interface component for building real-time chat applications, AI assistants, and bot integrations. It supports structured messages, user avatars, typing indicators, file attachments, mention tagging, markdown rendering, and extensive template customization. ## Navigation Guide ### Getting Started 📄 **Read:** [references/getting-started.md](references/getting-started.md) - NuGet package installation (`Syncfusion.EJ2.MVC5`) - Namespace, stylesheet, and script references - Script manager registration - Basic Chat UI rendering with `@Html.EJS().ChatUI()` - Configuring initial messages and current user ### Messages 📄 **Read:** [references/messages.md](references/messages.md) - `ChatUIMessage` model: `Text`, `Id`, `Author`, `Timestamp`, `Status`, `AttachedFile` - Pinned messages, reply-to threading (`ChatUIReplyTo` with `Timestamp`, `TimestampFormat`, `MentionUsers`), forwarded messages - Compact mode, auto-scroll, quick reply suggestions - Message toolbar with `MessageToolbarItemClickedEventArgs` (`item`, `message`, `cancel`, `event`) - Message status: `IconCss`, `Text`, `Tooltip` usage - Markdown content rendering with `marked` + `DOMPurify` ### User Configuration 📄 **Read:** [references/user-configuration.md](references/user-configuration.md) - `ChatUIUser` model: `Id`, `User`, `AvatarUrl`, `AvatarBgColor`, `CssClass`, `StatusIconCss` - Defining the current user with the `User` property - Avatar images, fallback initials, background color - Presence status icons (online, offline, busy, away) ### Header and Toolbar 📄 **Read:** [references/header-and-toolbar.md](references/header-and-toolbar.md) - Show/hide header (`ShowHeader`), header text and icon - `ChatUIToolbarSettings` — header toolbar items - Toolbar item properties: `IconCss`, `Type`, `Text`, `Visible`, `Disabled`, `Tooltip`, `CssClass`, `Align`, `TabIndex`, `Template` - `ItemClicked` event handler ### Footer and Templates 📄 **Read:** [references/footer-and-templates.md](references/footer-and-templates.md) - Show/hide footer (`ShowFooter`), custom footer template - Empty chat template, message template, suggestion template - Typing users template, time break template - Template context variables (`message`, `index`, `users`, `messageDate`, `suggestion`) ### Events and Methods 📄 **Read:** [references/events-and-methods.md](references/events-and-methods.md) - `Created`, `MessageSend`, `UserTyping` events with full event args (`cancel`, `isTyping`, `message`, `user`, `itemData`) - `addMessage()` — add message as string or object - `updateMessage()` — edit an existing message by ID - `scrollToBottom()` — programmatic scroll to latest message - `scrollToMessage(messageId)` — scroll to a specific message by ID - `focus()` — programmatically focus the chat input textarea - Accessing the ChatUI instance via `ej.base.getInstance()` ### Appearance and Layout 📄 **Read:** [references/appearance-and-layout.md](references/appearance-and-layout.md) - Placeholder, `Width`, `Height`, `CssClass` - Timestamps (`ShowTimeStamp`, `TimeStampFormat`) - Time breaks (`ShowTimeBreak`, `TimeBreakTemplate`) - Typing indicator (`TypingUsers`) - Load on demand (`LoadOnDemand`) for long conversation histories - Persistence (`EnablePersistence`) — save and restore state across page reloads ### File Attachments 📄 **Read:** [references/file-attachments.md](references/file-attachments.md) - Enable file attachments (`EnableAttachments`) - `AttachmentSettings`: `SaveUrl`, `RemoveUrl`, `AllowedFileTypes`, `MaxFileSize`, `SaveFormat`, `Path` - Drag-and-drop, maximum file count - Custom attachment and preview templates - Pre-populating attachments on messages at initial render (`AttachedFile`) - Attachment lifecycle events and `ChatAttachmentClickEventArgs` (`file`, `cancel`, `event`) ### Mentions and Globalization 📄 **Read:** [references/mentions-and-globalization.md](references/mentions-and-globalization.md) - `MentionUsers` list, `@` mention trigger popup - Custom trigger character (`MentionTriggerChar`) - Predefined mentions in message text using `{0}`, `{1}` placeholders - `MentionSelect` event - Localization (`Locale`, `ej.base.L10n.load`) and RTL (`EnableRtl`) ### Bot Integrations and Speech-to-Text 📄 **Read:** [references/bot-integrations.md](references/bot-integrations.md) - Microsoft Bot Framework (Direct Line) integration - Google Dialogflow integration - Speech-to-Text via Web Speech API + `SpeechToText` component - Secure token server pattern - `MessageSend` + `addMessage()` integration pattern - Troubleshooting common bot connection issues --- ## Quick Start Example **Controller (`HomeController.cs`):** ```csharp using Syncfusion.EJ2.InteractiveChat; public ActionResult Index() { var currentUser = new ChatUIUser { Id = "user1", User = "Albert" }; var otherUser = new ChatUIUser { Id = "user2", User = "Michale Suyama" }; var messages = new List<ChatUIMessage> { new ChatUIMessage { Text = "Hi Michale, are we on track for the deadline?", Author = currentUser }, new ChatUIMessage { Text = "Yes, the design phase is complete.", Author = otherUser }, new ChatUIMessage { Text = "I'll review it and send feedback by today.", Author = currentUser } }; ViewBag.CurrentUser = currentUser; ViewBag.Messages = messages; return View(); } ``` **View (`Index.cshtml`):** ```razor @using Syncfusion.EJ2.InteractiveChat <div style="height:400px; width:450px;"> @Html.EJS().ChatUI("chatUI") .User(ViewBag.CurrentUser) .Messages(ViewBag.Messages) .HeaderText("Team Chat") .Render() </div> ``` **Required layout references (`_Layout.cshtml`):** ```html <head> <link rel="stylesheet" href="https://cdn.syncfusion.com/ej2/{{ site.ej2version }}/fluent.css" /> <script src="https://cdn.syncfusion.com/ej2/{{ site.ej2version }}/dist/ej2.min.js"></script> </head> <body> ... @Html.EJS().ScriptManager() </body> ``` --- ## Common Patterns ### Programmatically Add a Message (Bot Reply) ```javascript function onMessageSend(args) { var chatUI = ej.base.getInstance(document.getElementById('chatUI'), ejs.interactivechat.ChatUI); fetch('/api/bot/reply', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ text: args.message.text }) }) .then(r => r.json()) .then(data => chatUI.addMessage({ text: data.reply, author: botUser })); } ``` ### Enable File Attachments ```razor @Html.EJS().ChatUI("chatUI") .User(ViewBag.CurrentUser) .EnableAttachments(true) .AttachmentSettings(new ChatUIFileAttachmentSettings { SaveUrl = Url.Content("https://services.syncfusion.com/aspnet/production/api/FileUploader/Save"), RemoveUrl = Url.Content("https://services.syncfusion.com/aspnet/production/api/FileUploader/Remove") }) .Render() ``` ### Show Typing Indicator (Client-Side) ```javascript function onCreated() { var chatUI = ej.base.getInstance(document.getElementById('chatUI'), ejs.interactivechat.ChatUI); chatUI.typingUsers = [{ id: "user2", user: "Michale Suyama" }]; chatUI.dataBind(); } ``` --- ## Key Properties Reference | Property | Type | Default | Description | |----------|------|---------|-------------| | `User` | `ChatUIUser` | — | Current logged-in user | | `Messages` | `List<ChatUIMessage>` | `[]` | Initial message collection | | `HeaderText` | `string` | — | Text shown in header | | `HeaderIconCss` | `string` | — | CSS class for header icon | | `ShowHeader` | `bool` | `true` | Show or hide the header | | `ShowFooter` | `bool` | `true` | Show or hide the footer | | `Placeholder` | `string` | `"Type your message…"` | Textarea placeholder | | `Width` | `string` | `"100%"` | Component width | | `Height` | `string` | `"100%"` | Component height | | `CssClass` | `string` | — | Custom CSS class | | `AutoScrollToBottom` | `bool` | `false` | Auto-scroll on new message | | `ShowTimeStamp` | `bool` | `true` | Show message timestamps | | `TimeStampFormat` | `string` | `"dd/MM/yyyy hh:mm a"` | Global timestamp format | | `ShowTimeBreak` | `bool` | `false` | Show date separators | | `EnableCompactMode` | `bool` | `false` | Align all messages left | | `LoadOnDemand` | `bool` | `false` | Lazy-load messages on scroll | | `EnablePersistence` | `bool` | `false` | Persist state across page reloads via localStorage | | `EnableAttachments` | `bool` | `false` | Enable file attachments | | `MentionUsers` | `List<ChatUIUser>` | — | Users available for `@` mention | | `TypingUsers` | `List<ChatUIUser>` | — | Users currently typing | | `EnableRtl` | `bool` | `false` | Right-to-left layout | | `Locale` | `string` | `"en"` | Localization culture code |
View on GitHub