Jakub Provaznik Ответов: 0

Asp.net MVC - ошибка после второй попытки открытия модального окна


Я пытаюсь реализовать bootstrap модальное окно при открытии деталей. Проблема в том, что я могу открыть его только один раз. Он открывается с целым шаблоном, в то время как это не должно быть. и во время второй попытки я получаю ошибку:

Цитата:
модальный - это не функция


Контейнер для основного вида:

<div id="data-container">
    @Html.Action("PartialDisplay", "Disp")
</div>


Я отображаю все данные в частичном виде, поэтому контроллер выглядит следующим образом:

public ActionResult Display()
       {
           return View();

       }

       public PartialViewResult PartialDisplay(int[] checkId)
       {
           if (checkId == null)
           {
              [my code]

               return PartialView(viewModel);
           }


подробное представление:

@using jidloApp.Classes
@using jidloApp.Models
@model DispDisplayVM

@{
    ViewBag.Title = "PartialDisplay";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="exampleModalLabel">Detail</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">×</span>
                </button>
            </div>
            <div class="modal-body" id="modalContent">
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
            </div>
        </div>
    </div>
</div>

<table class="table">
    <thead>
        <tr>
            <th>Nazev Jidla</th>
            <th>Kategorie</th>
            <th>Akce</th>

        </tr>
    </thead>
    <tbody>
        @foreach (Jidlo jidlo in Model.Jidlos)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => jidlo.name)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => jidlo.Category.popis)
                </td>
                <td>
                    @Html.ActionLink("Edit", "Edit", new { id = jidlo.JidloID }) |
                    @Ajax.ActionLink("Details","Details", new { id = jidlo.JidloID }, new AjaxOptions(){ UpdateTargetId = "modalContent", InsertionMode = InsertionMode.Replace, OnBegin = "openModalWindow" }) |
                    @Html.ActionLink("Delete", "Delete", new { id = jidlo.JidloID }, new { onclick = "return confirm('opravdu smazat polozku " + jidlo.name + "?');" })
                </td>
            </tr>
        }
    </tbody>
</table>

<script type="text/javascript">
    function openModalWindow() {
        $('#myModal').modal({
            show: true
        });
    }

</script>


действие контроллера:

public ActionResult Details(int id = 0)
       {
           Jidlo jidlo = db.Jidlos.Find(id);


           if (Request.IsAjaxRequest())
           {
               return PartialView(jidlo);
           }
           else {
           return View(jidlo);
           }
       }


Включенные сценарии компоновки:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="@Url.Content("~/Scripts/jquery-3.2.1.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")"></script>
<script src="@Url.Content("~/Scripts/bootstrap.js")"></script>


Чего мне здесь не хватает? Должен ли я загрузить несколько новых библиотек ajax?

Что я уже пробовал:

Я попытался изменить приоритет загрузки скриптов, но ничего не помогло

Richard Deeming

Очевидная первая проблема заключается в том, что вы включаете jQuery дважды - v1.12.4 из Google и v3.2.1 из вашей локальной папки скриптов.

Jakub Provaznik

понял, ошибка новичка. Теперь это работает. Знаете ли вы также, почему он отображается с шаблоном, а не просто с чистым модальным окном?

Richard Deeming

Проверьте HTML-код, возвращенный из частичного представления. Это, вероятно, включает в себя разметку шаблона со страницы макета.

Я также не совсем убежден в том, что InsertionMode.Replace по ссылке ваши данные. Вот так и будет заменять весь мир modal-body элемент. Вам, вероятно, придется сбросить его в openModalWindow функция.

Jakub Provaznik

Проблема заключалась только в разметке шаблона в представлении сведений. Теперь все работает идеально. Спасибо за помощь.

0 Ответов