From f4f730fe591ebf287cd28e08fc83979685db1ff5 Mon Sep 17 00:00:00 2001 From: Senthilarasu Balu Date: Mon, 15 Dec 2025 19:44:47 +0530 Subject: [PATCH 1/3] 998699: file attachment ug --- .../chat-ui/EJ2_ASP.MVC/events.md | 65 ++++++ .../chat-ui/EJ2_ASP.MVC/file-attachments.md | 150 ++++++++++++ .../chat-ui/EJ2_ASP.NETCORE/events.md | 65 ++++++ .../EJ2_ASP.NETCORE/file-attachments.md | 150 ++++++++++++ .../chat-ui/images/attachmentTemplate.png | Bin 0 -> 10748 bytes .../chat-ui/images/maxFileSize.png | Bin 0 -> 13212 bytes .../chat-ui/images/maximumCount.png | Bin 0 -> 16905 bytes .../chat-ui/images/previewTemplate.png | Bin 0 -> 59375 bytes .../events/attachmentClick/attachmentClick.cs | 11 + .../chat-ui/events/attachmentClick/razor | 11 + .../chat-ui/events/attachmentClick/tagHelper | 14 ++ .../attachmentRemoved/attachmentRemoved.cs | 11 + .../chat-ui/events/attachmentRemoved/razor | 11 + .../events/attachmentRemoved/tagHelper | 14 ++ .../attachmentUploadFailure.cs | 11 + .../events/attachmentUploadFailure/razor | 11 + .../events/attachmentUploadFailure/tagHelper | 14 ++ .../attachmentUploadSuccess.cs | 11 + .../events/attachmentUploadSuccess/razor | 11 + .../events/attachmentUploadSuccess/tagHelper | 14 ++ .../beforeAttachmentUpload.cs | 11 + .../events/beforeAttachmentUpload/razor | 11 + .../events/beforeAttachmentUpload/tagHelper | 14 ++ .../chat-ui/events/created/created.cs | 7 + .../code-snippet/chat-ui/events/created/razor | 2 +- .../chat-ui/events/created/tagHelper | 4 +- .../chat-ui/events/messageSend/messageSend.cs | 7 + .../chat-ui/events/messageSend/razor | 2 +- .../chat-ui/events/messageSend/tagHelper | 4 +- .../chat-ui/events/userTyping/razor | 2 +- .../chat-ui/events/userTyping/tagHelper | 4 +- .../chat-ui/events/userTyping/userTyping.cs | 7 + .../allowedFileTypes/allowedFileTypes.cs | 11 + .../file-attachments/allowedFileTypes/razor | 5 + .../allowedFileTypes/tagHelper | 9 + .../drag-and-drop/dragAndDrop.cs | 11 + .../file-attachments/drag-and-drop/razor | 5 + .../file-attachments/drag-and-drop/tagHelper | 9 + .../enableAttachments/enableAttachments.cs | 11 + .../file-attachments/enableAttachments/razor | 5 + .../enableAttachments/tagHelper | 7 + .../maxFileSize/maxFileSize.cs | 11 + .../file-attachments/maxFileSize/razor | 5 + .../file-attachments/maxFileSize/tagHelper | 9 + .../maximumCount/maximumCount.cs | 11 + .../file-attachments/maximumCount/razor | 5 + .../file-attachments/maximumCount/tagHelper | 9 + .../chat-ui/file-attachments/path/path.cs | 11 + .../chat-ui/file-attachments/path/razor | 5 + .../chat-ui/file-attachments/path/tagHelper | 9 + .../file-attachments/save-remove-url/razor | 5 + .../save-remove-url/saveRemoveUrl.cs | 11 + .../save-remove-url/tagHelper | 8 + .../chat-ui/file-attachments/saveFormat/razor | 5 + .../file-attachments/saveFormat/saveFormat.cs | 11 + .../file-attachments/saveFormat/tagHelper | 8 + .../chat-ui/file-attachments/template/razor | 213 ++++++++++++++++++ .../file-attachments/template/tagHelper | 213 ++++++++++++++++++ .../file-attachments/template/template.cs | 11 + .../chat-ui/getting-started/gettingstarted.cs | 7 + .../chat-ui/getting-started/razor | 2 +- .../chat-ui/getting-started/tagHelper | 4 +- .../emptyChatTemplate/defaultMessages.cs | 7 + .../chat-ui/templates/emptyChatTemplate/razor | 2 +- .../templates/emptyChatTemplate/tagHelper | 4 +- ej2-asp-core-toc.html | 1 + ej2-asp-mvc-toc.html | 1 + 67 files changed, 1300 insertions(+), 10 deletions(-) create mode 100644 ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/file-attachments.md create mode 100644 ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/file-attachments.md create mode 100644 ej2-asp-core-mvc/chat-ui/images/attachmentTemplate.png create mode 100644 ej2-asp-core-mvc/chat-ui/images/maxFileSize.png create mode 100644 ej2-asp-core-mvc/chat-ui/images/maximumCount.png create mode 100644 ej2-asp-core-mvc/chat-ui/images/previewTemplate.png create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentClick/attachmentClick.cs create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentClick/razor create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentClick/tagHelper create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentRemoved/attachmentRemoved.cs create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentRemoved/razor create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentRemoved/tagHelper create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadFailure/attachmentUploadFailure.cs create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadFailure/razor create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadFailure/tagHelper create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadSuccess/attachmentUploadSuccess.cs create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadSuccess/razor create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadSuccess/tagHelper create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/events/beforeAttachmentUpload/beforeAttachmentUpload.cs create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/events/beforeAttachmentUpload/razor create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/events/beforeAttachmentUpload/tagHelper create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/allowedFileTypes/allowedFileTypes.cs create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/allowedFileTypes/razor create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/allowedFileTypes/tagHelper create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/drag-and-drop/dragAndDrop.cs create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/drag-and-drop/razor create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/drag-and-drop/tagHelper create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/enableAttachments/enableAttachments.cs create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/enableAttachments/razor create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/enableAttachments/tagHelper create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/maxFileSize/maxFileSize.cs create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/maxFileSize/razor create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/maxFileSize/tagHelper create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/maximumCount/maximumCount.cs create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/maximumCount/razor create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/maximumCount/tagHelper create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/path/path.cs create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/path/razor create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/path/tagHelper create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/save-remove-url/razor create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/save-remove-url/saveRemoveUrl.cs create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/save-remove-url/tagHelper create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/saveFormat/razor create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/saveFormat/saveFormat.cs create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/saveFormat/tagHelper create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/template/razor create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/template/tagHelper create mode 100644 ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/template/template.cs diff --git a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/events.md b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/events.md index 62bf716c3e..3aaaa95bf2 100644 --- a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/events.md +++ b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/events.md @@ -50,3 +50,68 @@ The [UserTyping](https://help.syncfusion.com/cr/aspnetmvc-js2/Syncfusion.EJ2.Int {% include code-snippet/chat-ui/events/userTyping/userTyping.cs %} {% endhighlight %} {% endtabs %} + +## Before attachment upload + +The `BeforeAttachmentUpload` event is triggered before attached files begin uploading in the Chat UI. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/events/beforeAttachmentUpload/razor %} +{% endhighlight %} +{% highlight c# tabtitle="BeforeAttachmentUpload.cs" %} +{% include code-snippet/chat-ui/events/beforeAttachmentUpload/beforeAttachmentUpload.cs %} +{% endhighlight %} +{% endtabs %} + +## Attachment upload success + +The `AttachmentUploadSuccess` event is triggered when an attached file is successfully uploaded in the Chat UI. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/events/attachmentUploadSuccess/razor %} +{% endhighlight %} +{% highlight c# tabtitle="AttachmentUploadSuccess.cs" %} +{% include code-snippet/chat-ui/events/attachmentUploadSuccess/attachmentUploadSuccess.cs %} +{% endhighlight %} +{% endtabs %} + +## Attachment upload failure + +The `AttachmentUploadFailure` event is triggered when an attached file upload fails in the Chat UI. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/events/attachmentUploadFailure/razor %} +{% endhighlight %} +{% highlight c# tabtitle="AttachmentUploadFailure.cs" %} +{% include code-snippet/chat-ui/events/attachmentUploadFailure/attachmentUploadFailure.cs %} +{% endhighlight %} +{% endtabs %} + +## Attachment removed + +The `AttachmentRemoved` event is triggered when an attached file is removed from the Chat UI. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/events/attachmentRemoved/razor %} +{% endhighlight %} +{% highlight c# tabtitle="AttachmentRemoved.cs" %} +{% include code-snippet/chat-ui/events/attachmentRemoved/attachmentRemoved.cs %} +{% endhighlight %} +{% endtabs %} + +## Attachment click + +The `AttachmentClick` event is triggered when an attached file is clicked in the Chat UI. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/events/attachmentClick/razor %} +{% endhighlight %} +{% highlight c# tabtitle="AttachmentClick.cs" %} +{% include code-snippet/chat-ui/events/attachmentClick/attachmentClick.cs %} +{% endhighlight %} +{% endtabs %} diff --git a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/file-attachments.md b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/file-attachments.md new file mode 100644 index 0000000000..11da6c90b3 --- /dev/null +++ b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.MVC/file-attachments.md @@ -0,0 +1,150 @@ +--- +layout: post +title: Attachments in ##Platform_Name## Chat UI Control | Syncfusion +description: Checkout and learn about Attachments in Syncfusion ##Platform_Name## Chat UI control of Syncfusion Essential JS 2 and more. +platform: ej2-asp-core-mvc +control: Chat UI +publishingplatform: ##Platform_Name## +documentation: ug +--- + +# File Attachments in ##Platform_Name## Chat UI control + +The Chat UI control supports message attachments, enabling users to upload and send files (images, documents, and more) alongside messages for richer, more contextual conversations. Enable this functionality using the `EnableAttachments` property and customize the behavior through the `AttachmentSettings` configuration. + +## Enable file attachments + +Enable file attachment support by setting the `EnableAttachments` property to `true`. By default, it is `false`. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/enableAttachments/razor %} +{% endhighlight %} +{% highlight c# tabtitle="EnableAttachments.cs" %} +{% include code-snippet/chat-ui/file-attachments/enableAttachments/enableAttachments.cs %} +{% endhighlight %} +{% endtabs %} + +## Configure attachment settings + +Use the `AttachmentSettings` property to customize file attachment behavior, including upload endpoints, file type restrictions, and size limits. + +### Setting saveUrl and removeUrl + +Set the `SaveUrl` and `RemoveUrl` properties to specify server endpoints for handling file uploads and removals. The `SaveUrl` processes file uploads, while the `RemoveUrl` handles file deletion requests. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/save-remove-url/razor %} +{% endhighlight %} +{% highlight c# tabtitle="saveRemoveUrl.cs" %} +{% include code-snippet/chat-ui/file-attachments/save-remove-url/save-remove-url.cs %} +{% endhighlight %} +{% endtabs %} + +### Setting file type + +Use the `AllowedFileTypes` property to specify which file types users can upload. This property accepts file extensions (e.g., '.pdf', '.docx') or MIME types to control the types of files that can be attached. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/allowedFileTypes/razor %} +{% endhighlight %} +{% highlight c# tabtitle="AllowedFileTypes.cs" %} +{% include code-snippet/chat-ui/file-attachments/allowedFileTypes/allowedFileTypes.cs %} +{% endhighlight %} +{% endtabs %} + +### Setting file size + +Configure the `MaxFileSize` property to define the maximum file size allowed for uploads. Specify the size in bytes. The default value is `30000000` bytes (approximately 30 MB). Files exceeding this limit will not be uploaded. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/maxFileSize/razor %} +{% endhighlight %} +{% highlight c# tabtitle="MaxFileSize.cs" %} +{% include code-snippet/chat-ui/file-attachments/maxFileSize/maxFileSize.cs %} +{% endhighlight %} +{% endtabs %} + +![MaxFileSize](images/maxFileSize.png) + +### Setting save format + +Control the format used to send files to the server using the `SaveFormat` property when path is not set. It does not change how files are uploaded. The default value is `Blob`. + + - `Blob`: Used for fast, memory‑efficient local previews. + - `Base64`: Reads the file as a Base64 data URL, useful when you need an inline data URL. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/saveFormat/razor %} +{% endhighlight %} +{% highlight c# tabtitle="SaveFormat.cs" %} +{% include code-snippet/chat-ui/file-attachments/saveFormat/saveFormat.cs %} +{% endhighlight %} +{% endtabs %} + +### Setting server path + +The `Path` property to specifies the public base URL where uploaded files are (or will be) hosted. When set, it takes precedence over saveFormat. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/path/razor %} +{% endhighlight %} +{% highlight c# tabtitle="Path.cs" %} +{% include code-snippet/chat-ui/file-attachments/path/path.cs %} +{% endhighlight %} +{% endtabs %} + +### Enabling drag-and-drop + +Toggle drag-and-drop support for attachments via `EnableDragAndDrop` property. The default value is `true`. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/drag-and-drop/razor %} +{% endhighlight %} +{% highlight c# tabtitle="DragAndDrop.cs" %} +{% include code-snippet/chat-ui/file-attachments/drag-and-drop/drag-and-drop.cs %} +{% endhighlight %} +{% endtabs %} + +### Setting maximum count + +Restrict how many files can be attached at once using `MaximumCount`. The default value is `10`. If users select more than the allowed count, the maxfileSize error will be displayed. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/maximumCount/razor %} +{% endhighlight %} +{% highlight c# tabtitle="MaximumCount.cs" %} +{% include code-snippet/chat-ui/file-attachments/maximumCount/maximumCount.cs %} +{% endhighlight %} +{% endtabs %} + +![MaximumCount](images/maximumCount.png) + +## Templates + +### Customizing the file preview + +Provide a custom UI for previewing selected files using `PreviewTemplate`. Use this to render thumbnails, filenames, progress, remove buttons, or any additional metadata prior to sending. + +### Customizing the attachments + +Control how attachments appear inside message bubbles with `AttachmentTemplate`. Use this to tailor the display of images, documents, or custom file types once the message is posted. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/template/razor %} +{% endhighlight %} +{% highlight c# tabtitle="Template.cs" %} +{% include code-snippet/chat-ui/file-attachments/template/template.cs %} +{% endhighlight %} +{% endtabs %} + +![AttachmentTemplate](images/attachmentTemplate.png) +![PreviewTemplate](images/previewTemplate.png) diff --git a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/events.md b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/events.md index ef24a7fcc6..5cb030c88b 100644 --- a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/events.md +++ b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/events.md @@ -50,3 +50,68 @@ The [userTyping](https://help.syncfusion.com/cr/aspnetcore-js2/Syncfusion.EJ2.In {% include code-snippet/chat-ui/events/userTyping/userTyping.cs %} {% endhighlight %} {% endtabs %} + +## Before attachment upload + +The `beforeAttachmentUpload` event is triggered before attached files begin uploading in the Chat UI. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/events/beforeAttachmentUpload/tagHelper %} +{% endhighlight %} +{% highlight c# tabtitle="BeforeAttachmentUpload.cs" %} +{% include code-snippet/chat-ui/events/beforeAttachmentUpload/beforeAttachmentUpload.cs %} +{% endhighlight %} +{% endtabs %} + +## Attachment upload success + +The `attachmentUploadSuccess` event is triggered when an attached file is successfully uploaded in the Chat UI. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/events/attachmentUploadSuccess/tagHelper %} +{% endhighlight %} +{% highlight c# tabtitle="AttachmentUploadSuccess.cs" %} +{% include code-snippet/chat-ui/events/attachmentUploadSuccess/attachmentUploadSuccess.cs %} +{% endhighlight %} +{% endtabs %} + +## Attachment upload failure + +The `attachmentUploadFailure` event is triggered when an attached file upload fails in the Chat UI. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/events/attachmentUploadFailure/tagHelper %} +{% endhighlight %} +{% highlight c# tabtitle="AttachmentUploadFailure.cs" %} +{% include code-snippet/chat-ui/events/attachmentUploadFailure/attachmentUploadFailure.cs %} +{% endhighlight %} +{% endtabs %} + +## Attachment removed + +The `attachmentRemoved` event is triggered when an attached file is removed from the Chat UI. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/events/attachmentRemoved/tagHelper %} +{% endhighlight %} +{% highlight c# tabtitle="AttachmentRemoved.cs" %} +{% include code-snippet/chat-ui/events/attachmentRemoved/attachmentRemoved.cs %} +{% endhighlight %} +{% endtabs %} + +## Attachment click + +The `attachmentClick` event is triggered when an attached file is clicked in the Chat UI. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/events/attachmentClick/tagHelper %} +{% endhighlight %} +{% highlight c# tabtitle="AttachmentClick.cs" %} +{% include code-snippet/chat-ui/events/attachmentClick/attachmentClick.cs %} +{% endhighlight %} +{% endtabs %} diff --git a/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/file-attachments.md b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/file-attachments.md new file mode 100644 index 0000000000..c0d7902d38 --- /dev/null +++ b/ej2-asp-core-mvc/chat-ui/EJ2_ASP.NETCORE/file-attachments.md @@ -0,0 +1,150 @@ +--- +layout: post +title: Attachments in ##Platform_Name## Chat UI Control | Syncfusion +description: Checkout and learn about Attachments in Syncfusion ##Platform_Name## Chat UI control of Syncfusion Essential JS 2 and more. +platform: ej2-asp-core-mvc +control: Chat UI +publishingplatform: ##Platform_Name## +documentation: ug +--- + +# File Attachments in ##Platform_Name## Chat UI control + +The Chat UI control supports message attachments, enabling users to upload and send files (images, documents, and more) alongside messages for richer, more contextual conversations. Enable this functionality using the `enableAttachments` property and customize the behavior through the `attachmentSettings` configuration. + +## Enable file attachments + +Enable file attachment support by setting the `enableAttachments` property to `true`. By default, it is `false`. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/enableAttachments/tagHelper %} +{% endhighlight %} +{% highlight c# tabtitle="EnableAttachments.cs" %} +{% include code-snippet/chat-ui/file-attachments/enableAttachments/enableAttachments.cs %} +{% endhighlight %} +{% endtabs %} + +## Configure attachment settings + +Use the `e-chatui-attachmentsettings` tag directive to customize file attachment behavior, including upload endpoints, file type restrictions, and size limits. + +### Setting saveUrl and removeUrl + +Set the `saveUrl` and `removeUrl` properties to specify server endpoints for handling file uploads and removals. The `saveUrl` processes file uploads, while the `removeUrl` handles file deletion requests. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/save-remove-url/tagHelper %} +{% endhighlight %} +{% highlight c# tabtitle="saveRemoveUrl.cs" %} +{% include code-snippet/chat-ui/file-attachments/save-remove-url/save-remove-url.cs %} +{% endhighlight %} +{% endtabs %} + +### Setting file type + +Use the `allowedFileTypes` property to specify which file types users can upload. This property accepts file extensions (e.g., '.pdf', '.docx') or MIME types to control the types of files that can be attached. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/allowedFileTypes/tagHelper %} +{% endhighlight %} +{% highlight c# tabtitle="AllowedFileTypes.cs" %} +{% include code-snippet/chat-ui/file-attachments/allowedFileTypes/allowedFileTypes.cs %} +{% endhighlight %} +{% endtabs %} + +### Setting file size + +Configure the `maxFileSize` property to define the maximum file size allowed for uploads. Specify the size in bytes. The default value is `30000000` bytes (approximately 30 MB). Files exceeding this limit will not be uploaded. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/maxFileSize/tagHelper %} +{% endhighlight %} +{% highlight c# tabtitle="MaxFileSize.cs" %} +{% include code-snippet/chat-ui/file-attachments/maxFileSize/maxFileSize.cs %} +{% endhighlight %} +{% endtabs %} + +![MaxFileSize](images/maxFileSize.png) + +### Setting save format + +Control the format used to send files to the server using the `saveFormat` property when path is not set. It does not change how files are uploaded. The default value is `Blob`. + + - `Blob`: Used for fast, memory‑efficient local previews. + - `Base64`: Reads the file as a Base64 data URL, useful when you need an inline data URL. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/saveFormat/tagHelper %} +{% endhighlight %} +{% highlight c# tabtitle="SaveFormat.cs" %} +{% include code-snippet/chat-ui/file-attachments/saveFormat/saveFormat.cs %} +{% endhighlight %} +{% endtabs %} + +### Setting server path + +The `path` property to specifies the public base URL where uploaded files are (or will be) hosted. When set, it takes precedence over saveFormat. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/path/tagHelper %} +{% endhighlight %} +{% highlight c# tabtitle="Path.cs" %} +{% include code-snippet/chat-ui/file-attachments/path/path.cs %} +{% endhighlight %} +{% endtabs %} + +### Enabling drag-and-drop + +Toggle drag-and-drop support for attachments via `enableDragAndDrop` property. The default value is `true`. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/drag-and-drop/tagHelper %} +{% endhighlight %} +{% highlight c# tabtitle="DragAndDrop.cs" %} +{% include code-snippet/chat-ui/file-attachments/drag-and-drop/drag-and-drop.cs %} +{% endhighlight %} +{% endtabs %} + +### Setting maximum count + +Restrict how many files can be attached at once using `maximumCount`. The default value is `10`. If users select more than the allowed count, the maxfileSize error will be displayed. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/maximumCount/tagHelper %} +{% endhighlight %} +{% highlight c# tabtitle="MaximumCount.cs" %} +{% include code-snippet/chat-ui/file-attachments/maximumCount/maximumCount.cs %} +{% endhighlight %} +{% endtabs %} + +![MaximumCount](images/maximumCount.png) + +## Templates + +### Customizing the file preview + +Provide a custom UI for previewing selected files using `previewTemplate`. Use this to render thumbnails, filenames, progress, remove buttons, or any additional metadata prior to sending. + +### Customizing the attachments + +Control how attachments appear inside message bubbles with `attachmentTemplate`. Use this to tailor the display of images, documents, or custom file types once the message is posted. + +{% tabs %} +{% highlight razor tabtitle="CSHTML" %} +{% include code-snippet/chat-ui/file-attachments/template/tagHelper %} +{% endhighlight %} +{% highlight c# tabtitle="Template.cs" %} +{% include code-snippet/chat-ui/file-attachments/template/template.cs %} +{% endhighlight %} +{% endtabs %} + +![AttachmentTemplate](images/attachmentTemplate.png) +![PreviewTemplate](images/previewTemplate.png) diff --git a/ej2-asp-core-mvc/chat-ui/images/attachmentTemplate.png b/ej2-asp-core-mvc/chat-ui/images/attachmentTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..14b22f5902ddea008b3b74ddabe9738b61d4ad48 GIT binary patch literal 10748 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 literal 0 HcmV?d00001 diff --git a/ej2-asp-core-mvc/chat-ui/images/maximumCount.png b/ej2-asp-core-mvc/chat-ui/images/maximumCount.png new file mode 100644 index 0000000000000000000000000000000000000000..c918663e1bc9bae4a13ba82ffe27793ecfdda07d GIT binary patch literal 16905 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 literal 0 HcmV?d00001 diff --git a/ej2-asp-core-mvc/chat-ui/images/previewTemplate.png b/ej2-asp-core-mvc/chat-ui/images/previewTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..6b7b64db9bf522541a74a151233cee4252a900ac GIT binary patch literal 59375 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

N;kTbX+! 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 literal 0 HcmV?d00001 diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentClick/attachmentClick.cs b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentClick/attachmentClick.cs new file mode 100644 index 0000000000..c2a4a9e5e0 --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentClick/attachmentClick.cs @@ -0,0 +1,11 @@ +using Syncfusion.EJ2.InteractiveChat; + +public ChatUIUser CurrentUser { get; set; } +public ChatUIUser CurrentUserModel { get; set; } = new ChatUIUser() { Id = "user1", User = "Albert" }; + +public ActionResult AttachmentClick() +{ + CurrentUser = CurrentUserModel; + ViewBag.CurrentUser = CurrentUser; + return View(); +} diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentClick/razor b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentClick/razor new file mode 100644 index 0000000000..541a6aabd0 --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentClick/razor @@ -0,0 +1,11 @@ +@using Syncfusion.EJ2.InteractiveChat + +

+ @Html.EJS().ChatUI("chatUser").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"), AttachmentClick = "attachmentClick" }).User(ViewBag.CurrentUser).Render() +
+ + diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentClick/tagHelper b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentClick/tagHelper new file mode 100644 index 0000000000..b7f49aed90 --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentClick/tagHelper @@ -0,0 +1,14 @@ +@using Syncfusion.EJ2.InteractiveChat; + +
+ + + + +
+ + diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentRemoved/attachmentRemoved.cs b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentRemoved/attachmentRemoved.cs new file mode 100644 index 0000000000..bfae99c9be --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentRemoved/attachmentRemoved.cs @@ -0,0 +1,11 @@ +using Syncfusion.EJ2.InteractiveChat; + +public ChatUIUser CurrentUser { get; set; } +public ChatUIUser CurrentUserModel { get; set; } = new ChatUIUser() { Id = "user1", User = "Albert" }; + +public ActionResult AttachmentRemoved() +{ + CurrentUser = CurrentUserModel; + ViewBag.CurrentUser = CurrentUser; + return View(); +} diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentRemoved/razor b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentRemoved/razor new file mode 100644 index 0000000000..89eddaad29 --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentRemoved/razor @@ -0,0 +1,11 @@ +@using Syncfusion.EJ2.InteractiveChat + +
+ @Html.EJS().ChatUI("chatUser").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") }).AttachmentRemoved("attachmentRemoved").User(ViewBag.CurrentUser).Render() +
+ + diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentRemoved/tagHelper b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentRemoved/tagHelper new file mode 100644 index 0000000000..208cef6f02 --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentRemoved/tagHelper @@ -0,0 +1,14 @@ +@using Syncfusion.EJ2.InteractiveChat; + +
+ + + + +
+ + diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadFailure/attachmentUploadFailure.cs b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadFailure/attachmentUploadFailure.cs new file mode 100644 index 0000000000..182dbb5fd4 --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadFailure/attachmentUploadFailure.cs @@ -0,0 +1,11 @@ +using Syncfusion.EJ2.InteractiveChat; + +public ChatUIUser CurrentUser { get; set; } +public ChatUIUser CurrentUserModel { get; set; } = new ChatUIUser() { Id = "user1", User = "Albert" }; + +public ActionResult AttachmentUploadFailure() +{ + CurrentUser = CurrentUserModel; + ViewBag.CurrentUser = CurrentUser; + return View(); +} diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadFailure/razor b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadFailure/razor new file mode 100644 index 0000000000..7506af7911 --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadFailure/razor @@ -0,0 +1,11 @@ +@using Syncfusion.EJ2.InteractiveChat + +
+ @Html.EJS().ChatUI("chatUser").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") }).AttachmentUploadFailure("attachmentUploadFailure").User(ViewBag.CurrentUser).Render() +
+ + diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadFailure/tagHelper b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadFailure/tagHelper new file mode 100644 index 0000000000..d0ba27de08 --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadFailure/tagHelper @@ -0,0 +1,14 @@ +@using Syncfusion.EJ2.InteractiveChat; + +
+ + + + +
+ + diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadSuccess/attachmentUploadSuccess.cs b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadSuccess/attachmentUploadSuccess.cs new file mode 100644 index 0000000000..85bc48a209 --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadSuccess/attachmentUploadSuccess.cs @@ -0,0 +1,11 @@ +using Syncfusion.EJ2.InteractiveChat; + +public ChatUIUser CurrentUser { get; set; } +public ChatUIUser CurrentUserModel { get; set; } = new ChatUIUser() { Id = "user1", User = "Albert" }; + +public ActionResult AttachmentUploadSuccess() +{ + CurrentUser = CurrentUserModel; + ViewBag.CurrentUser = CurrentUser; + return View(); +} diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadSuccess/razor b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadSuccess/razor new file mode 100644 index 0000000000..0d93041221 --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadSuccess/razor @@ -0,0 +1,11 @@ +@using Syncfusion.EJ2.InteractiveChat + +
+ @Html.EJS().ChatUI("chatUser").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") }).AttachmentUploadSuccess("attachmentUploadSuccess").User(ViewBag.CurrentUser).Render() +
+ + diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadSuccess/tagHelper b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadSuccess/tagHelper new file mode 100644 index 0000000000..373f0b4d8e --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/attachmentUploadSuccess/tagHelper @@ -0,0 +1,14 @@ +@using Syncfusion.EJ2.InteractiveChat; + +
+ + + + +
+ + diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/beforeAttachmentUpload/beforeAttachmentUpload.cs b/ej2-asp-core-mvc/code-snippet/chat-ui/events/beforeAttachmentUpload/beforeAttachmentUpload.cs new file mode 100644 index 0000000000..5ffa23237e --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/beforeAttachmentUpload/beforeAttachmentUpload.cs @@ -0,0 +1,11 @@ +using Syncfusion.EJ2.InteractiveChat; + +public ChatUIUser CurrentUser { get; set; } +public ChatUIUser CurrentUserModel { get; set; } = new ChatUIUser() { Id = "user1", User = "Albert" }; + +public ActionResult BeforeAttachmentUpload() +{ + CurrentUser = CurrentUserModel; + ViewBag.CurrentUser = CurrentUser; + return View(); +} diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/beforeAttachmentUpload/razor b/ej2-asp-core-mvc/code-snippet/chat-ui/events/beforeAttachmentUpload/razor new file mode 100644 index 0000000000..3a0f9ab9c8 --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/beforeAttachmentUpload/razor @@ -0,0 +1,11 @@ +@using Syncfusion.EJ2.InteractiveChat + +
+ @Html.EJS().ChatUI("chatUser").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") }).BeforeAttachmentUpload("beforeAttachmentUpload").User(ViewBag.CurrentUser).Render() +
+ + diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/beforeAttachmentUpload/tagHelper b/ej2-asp-core-mvc/code-snippet/chat-ui/events/beforeAttachmentUpload/tagHelper new file mode 100644 index 0000000000..0d2bc059da --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/beforeAttachmentUpload/tagHelper @@ -0,0 +1,14 @@ +@using Syncfusion.EJ2.InteractiveChat; + +
+ + + + +
+ + diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/created/created.cs b/ej2-asp-core-mvc/code-snippet/chat-ui/events/created/created.cs index 757eaf59ee..38b1d5d7f3 100644 --- a/ej2-asp-core-mvc/code-snippet/chat-ui/events/created/created.cs +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/created/created.cs @@ -1,4 +1,11 @@ +using Syncfusion.EJ2.InteractiveChat; + +public ChatUIUser CurrentUser { get; set; } +public ChatUIUser CurrentUserModel { get; set; } = new ChatUIUser() { Id = "user1", User = "Albert" }; + public ActionResult Created() { + CurrentUser = CurrentUserModel; + ViewBag.CurrentUser = CurrentUser; return View(); } \ No newline at end of file diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/events/created/razor b/ej2-asp-core-mvc/code-snippet/chat-ui/events/created/razor index 0afdf0c897..c54821e804 100644 --- a/ej2-asp-core-mvc/code-snippet/chat-ui/events/created/razor +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/events/created/razor @@ -1,7 +1,7 @@ @using Syncfusion.EJ2.InteractiveChat
- @Html.EJS().ChatUI("chatUser").Created("onCreated").Render() + @Html.EJS().ChatUI("chatUser").Created("onCreated").User(ViewBag.CurrentUser).Render()
+ + + + + + diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/template/tagHelper b/ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/template/tagHelper new file mode 100644 index 0000000000..f7a9419ed8 --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/template/tagHelper @@ -0,0 +1,213 @@ +@using Syncfusion.EJ2.InteractiveChat; +
+ + + + + +
+ + + + + + + + diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/template/template.cs b/ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/template/template.cs new file mode 100644 index 0000000000..5e30717c44 --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/file-attachments/template/template.cs @@ -0,0 +1,11 @@ +using Syncfusion.EJ2.InteractiveChat; + +public ChatUIUser CurrentUser { get; set; } +public ChatUIUser CurrentUserModel { get; set; } = new ChatUIUser() { Id = "user1", User = "Albert" }; + +public ActionResult Template() +{ + CurrentUser = CurrentUserModel; + ViewBag.CurrentUser = CurrentUser; + return View(); +} diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/getting-started/gettingstarted.cs b/ej2-asp-core-mvc/code-snippet/chat-ui/getting-started/gettingstarted.cs index aa9ed51b46..20f9d119b9 100644 --- a/ej2-asp-core-mvc/code-snippet/chat-ui/getting-started/gettingstarted.cs +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/getting-started/gettingstarted.cs @@ -1,4 +1,11 @@ +using Syncfusion.EJ2.InteractiveChat; + +public ChatUIUser CurrentUser { get; set; } +public ChatUIUser CurrentUserModel { get; set; } = new ChatUIUser() { Id = "user1", User = "Albert" }; + public ActionResult Default() { + CurrentUser = CurrentUserModel; + ViewBag.CurrentUser = CurrentUser; return View(); } \ No newline at end of file diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/getting-started/razor b/ej2-asp-core-mvc/code-snippet/chat-ui/getting-started/razor index 6bf0564826..4f28512f04 100644 --- a/ej2-asp-core-mvc/code-snippet/chat-ui/getting-started/razor +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/getting-started/razor @@ -1,5 +1,5 @@ @using Syncfusion.EJ2.InteractiveChat
- @Html.EJS().ChatUI("chatUI").Render() + @Html.EJS().ChatUI("chatUI").User(ViewBag.CurrentUser).Render()
diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/getting-started/tagHelper b/ej2-asp-core-mvc/code-snippet/chat-ui/getting-started/tagHelper index 87187bc288..59673c56eb 100644 --- a/ej2-asp-core-mvc/code-snippet/chat-ui/getting-started/tagHelper +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/getting-started/tagHelper @@ -1,5 +1,7 @@ @using Syncfusion.EJ2.InteractiveChat;
- + + +
diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/templates/emptyChatTemplate/defaultMessages.cs b/ej2-asp-core-mvc/code-snippet/chat-ui/templates/emptyChatTemplate/defaultMessages.cs index 24a4d2032f..beb7eb6a55 100644 --- a/ej2-asp-core-mvc/code-snippet/chat-ui/templates/emptyChatTemplate/defaultMessages.cs +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/templates/emptyChatTemplate/defaultMessages.cs @@ -1,4 +1,11 @@ +using Syncfusion.EJ2.InteractiveChat; + +public ChatUIUser CurrentUser { get; set; } +public ChatUIUser CurrentUserModel { get; set; } = new ChatUIUser() { Id = "user1", User = "Albert" }; + public ActionResult EmptyChatTemplate() { + CurrentUser = CurrentUserModel; + ViewBag.CurrentUser = CurrentUser; return View(); } \ No newline at end of file diff --git a/ej2-asp-core-mvc/code-snippet/chat-ui/templates/emptyChatTemplate/razor b/ej2-asp-core-mvc/code-snippet/chat-ui/templates/emptyChatTemplate/razor index df3f02c873..2e9c9349b8 100644 --- a/ej2-asp-core-mvc/code-snippet/chat-ui/templates/emptyChatTemplate/razor +++ b/ej2-asp-core-mvc/code-snippet/chat-ui/templates/emptyChatTemplate/razor @@ -1,7 +1,7 @@ @using Syncfusion.EJ2.InteractiveChat;
- @Html.EJS().ChatUI("chatUser").EmptyChatTemplate("#emptyChatContent").Render() + @Html.EJS().ChatUI("chatUser").EmptyChatTemplate("#emptyChatContent").User(ViewBag.CurrentUser).Render()
diff --git a/ej2-asp-core-mvc/code-snippet/ai-assistview/events/attachmentClick/tagHelper b/ej2-asp-core-mvc/code-snippet/ai-assistview/events/attachmentClick/tagHelper new file mode 100644 index 0000000000..07b4ca2164 --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/ai-assistview/events/attachmentClick/tagHelper @@ -0,0 +1,23 @@ +@using Syncfusion.EJ2.InteractiveChat; + +
+ + + +
+ + diff --git a/ej2-asp-core-mvc/code-snippet/ai-assistview/file-attachments/maximumCount/maximumCount.cs b/ej2-asp-core-mvc/code-snippet/ai-assistview/file-attachments/maximumCount/maximumCount.cs new file mode 100644 index 0000000000..62a214d44f --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/ai-assistview/file-attachments/maximumCount/maximumCount.cs @@ -0,0 +1,4 @@ +public ActionResult MaximumCount() +{ + return View(); +} \ No newline at end of file diff --git a/ej2-asp-core-mvc/code-snippet/ai-assistview/file-attachments/maximumCount/razor b/ej2-asp-core-mvc/code-snippet/ai-assistview/file-attachments/maximumCount/razor new file mode 100644 index 0000000000..1581b8d321 --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/ai-assistview/file-attachments/maximumCount/razor @@ -0,0 +1,18 @@ +@using Syncfusion.EJ2.InteractiveChat + +
+ @Html.EJS().AIAssistView("aiAssistView").EnableAttachments(true).PromptRequest("onPromptRequest").Created("onCreated").AttachmentSettings(new AIAssistViewAttachmentSettings() { SaveUrl = @Url.Content("https://services.syncfusion.com/aspnet/production/api/FileUploader/Save"), RemoveUrl = @Url.Content("https://services.syncfusion.com/aspnet/production/api/FileUploader/Remove"), MaximumCount = 5 }).Render() +
+ + diff --git a/ej2-asp-core-mvc/code-snippet/ai-assistview/file-attachments/maximumCount/tagHelper b/ej2-asp-core-mvc/code-snippet/ai-assistview/file-attachments/maximumCount/tagHelper new file mode 100644 index 0000000000..e3302a93ba --- /dev/null +++ b/ej2-asp-core-mvc/code-snippet/ai-assistview/file-attachments/maximumCount/tagHelper @@ -0,0 +1,20 @@ +@using Syncfusion.EJ2.InteractiveChat; + +
+ + + +
+ +