htmlasp.net-corebootstrap-modalasp.net-mvc-partialview

Bootstrap Modal throwing Illegal invocation error in asp.net core partial view


I am using asp.net core to loop over the list of model objects and in each iteration, I am calling a modal to open with anchor tag. The code is given below.

foreach (var job in Model)
{
    <div class="col-12">
        <div class="card">
            <div class="card-body">
                <div class="row">
                    <div class="col-xl-7 col-md-8 col-sm-12">
                        <div class="d-flex align-items-start flex-wrap" style="column-gap: 20px; row-gap: 10px;">
                            <div class="container-icon dark-icon">
                                <i data-feather="briefcase"></i>
                            </div>
                            <div>
                                <a href="#" class="prev-job" data-id="@job.Id" data-bs-toggle="modal" data-bs-target="@("#j"+job.Id)">
                                    <h2 class="mt-0">@job.Name</h2>
                                </a>
                                <p class="text-fade">
                                    @(job.RecruitmentType != null ? job.RecruitmentType : ""), 
                                    @(job.Experience != null ? job.Experience + " experience" : "Experience unspecified")
                                </p>
                            </div>
                            <div class="d-flex align-items-center align-self-start">
                                <i class="fa fa-circle fade-icon"></i>
                                <span class="text-fade mx-3">
                                    @(job.DatePosted.ToString("dd MMM yyyy"))
                                </span>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    @await Html.PartialAsync("JobPreview", job.JobPreviewDetails)
}

Using <a href="#" class="prev-job" data-id="@job.Id" data-bs-toggle="modal" data-bs-target="@("#j"+job.Id)", I call the model to open which is displayed in a Partial View.

JobOpening.cshtml PartialView file is given below.

@model BusinessLogicCommon.RequestModel._JobPreview
<div id="@("j"+Model.Id)" class="job-preview modal modal-right fade" tabindex="-1" role="dialog" aria-hidden="true">
    <div class="row">
        <div class="d-flex align-items-start">
            <div class="container-icon dark-icon mt-3">
                <i data-feather="briefcase"></i>
            </div>
            <div style="margin-left: 30px;">
                <h2 class="fw-500">@Model.JobTitle</h2>
                <p class="text-fade">
                    @(Model.RecruitmentType != null ? Model.RecruitmentType : "Type unspecified"),
                    @(Model.Experience != null ? Model.Experience + " experience" : "Experience unspecified")
                </p>
            </div>
        </div>
    </div>
</div>

The model is not opening and I am getting vendors.min.js:18 Uncaught TypeError: Illegal invocation at Object.findOne (vendors.min.js:18:9132) error.


Solution

  • You need to put your modal data into

    <div class="modal-dialog">
        <div class="modal-content">
              xxxxx
        </div>
    </div>
    

    Please change your Partial View to:

    @model BusinessLogicCommon.RequestModel._JobPreview
    <div id="@("j"+Model.Id)" class="job-preview modal modal-right fade" tabindex="-1" role="dialog" aria-hidden="true">
        <div class="modal-dialog">
           <div class="modal-content">
                <div class="row">
                    xxxxxx
                </div>
           </div>
        </div>               
    </div>
    

    Then the modal can show normally.