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
Проблема заключалась только в разметке шаблона в представлении сведений. Теперь все работает идеально. Спасибо за помощь.