Open Closed

Abp-Modal select2 Usage Problem #1547


User avatar
0
selinkoykiran created

ABP Framework version: v4.3.0 UI type: Razor (MVC) DB provider: EF Core Tiered (MVC)

Hello , I want to use tagged select2 (with dynamic option creation property which is tag:true property for this library. ) in abp-modal , and this library included in abp framework wwwroot. But we got en exception :

We want below implementation :

: I'm sharing code below : **Modal.js : **

var abp = abp || {};

abp.modals.modelCreate = function () {
    var initModal = function (publicApi, args) {
        debugger;
        var $modal = publicApi.getModal();
        debugger;
        var $modalId = publicApi.getModalId();
        debugger;
        $("#MultipleSelectAssociate").select2({
            tags: true,
            //maximumSelectionLength: 1,
            dropdownParent: $('#' + $modalId) 
            //width: 'element',
            //insertTag: function (data, tag) {
            //    // Insert the tag at the end of the results
            //    data.push(tag);
            //}
        });
    };
    return {
        initModal: initModal
    };
};

Modal.Cshtml:

@page
@using Microsoft.AspNetCore.Mvc.Localization
@using Siemens.Odms.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
@using Siemens.Odms.Web.Pages.Odms.Exports
@inject IHtmlLocalizer<OdmsResource> L

@model AssociateExportModalModel
@{
    Layout = null;
}
@section styles {
    <abp-style-bundle>
        <abp-style src="/libs/select2/css/select2.min.css" />
    </abp-style-bundle>
}

@section scripts
{
    <abp-script src="/libs/select2/js/select2.min.js" />
}
<form data-ajaxForm="true" asp-page="/Odms/Models/Exports/AssociateExportModal" autocomplete="off">
    <abp-modal>
            <abp-modal-header title="@L["Associate"].Value"></abp-modal-header>
            <abp-modal-body>
                <select class="custom-select form-control" id="MultipleSelectAssociate" asp-items="Model.SourceList" asp-for="AssociateModel.SourceName" title="@L["SourceName"].Value">
                </select>
                <abp-input type="hidden" asp-for="AssociateModel.OperationId" label="@L["OperationId"].Value" />
            </abp-modal-body>
            <abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer>
        </abp-modal>

</form>

**Main js which calls modal : **

   var associateExportModal = new abp.ModalManager({
        viewUrl: abp.appPath + "Odms/Models/Exports/AssociateExportModal",
        scriptUrl: "/Pages/Odms/Models/Exports/associateExportModal.js",
        modalClass: "modelCreate"
    });

****
// In a column button action 
                                action: function (data) {
                                    someService.getSourcesByModelPullDown(modelIdFromRoute)
                                        .then(function (response) {
                                            associateExportModal.open({
                                                operationId: uuidv4(),
                                                schemaName: schemaNameFromRoute,
                                                serverName: serverNameFromRoute,
                                                existingModelFileId: data.record.fileId,
                                                existingModelFileName: data.record.fileName,
                                                sourceList: response.pullDownSources
                                            });
                                        });
                                }

So What is the problem (I've read about select2 problems with modal component but I tried all the solutions for this problems and I think it could be maybe an issue about abp-modal ? ) or how we can implement a dropdown with dynamic options , is there another way?

Thank you..


3 Answer(s)
  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    hi

    Can you try to init the select2 on the model show callback?

    associateExportModal.onOpen(function(publicApi) {
        //init select2
    });
    
  • User Avatar
    0
    selinkoykiran created

    Hello, I tried , I implemented in index.js (who calls modal), result is not changed

  • User Avatar
    0
    selinkoykiran created

    I think I solved it, In the abp-modal manager component code the getModelId() not returning the whole name of the modal div id. :

    It creates something like <div id="Abp_Modal_4955791625209750931Container" > ... but when we call getModalId() method it just get Abp_Modal_4955791625209750931 this part. So I just change the code below with adding string 'Container' to the end of modalId:

    So now select2 can resolve dropdownParent correctly.

    Maybe you can think about to add new method which get with div id in next releases. Thank you.

Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
Do you need assistance from an ABP expert?
Schedule a Meeting
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v9.2.0-preview. Updated on March 18, 2025, 10:42