340 / 302 / 135
Регистрация: 14.03.2015
Сообщений: 1,120
Записей в блоге: 1
1

Модальное окно не открывается

20.10.2016, 09:14. Показов 2513. Ответов 4
Метки ajax (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Написал по гайду всплывающее окно, которое отображает частичное представление - все работает.

Решил применить технологию в другом представлении - работать нормально не захотело.

Что я имею:
Кликните здесь для просмотра всего текста
PartialView, который находится внутри другого View
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
...
<div id="Dialog" class="modal fade">
    <div id="dialogContent" class="modal-dialog"></div>
</div>
       ...
    @foreach (var item in Model)
    {
        <tr>
            <td>@Html.DisplayFor(x => item.Id)</td>
            <th>@Html.DisplayFor(x => item.ManInfo.Initals)</th>
            <th>@Html.DisplayFor(x => item.Post)</th>
            <th>@Html.DisplayFor(x => item.Departament.Name)</th>
            <td>
                @Html.ActionLink("Редактировать", "Edit", new { id = item.Id }) |
                @Html.ActionLink("Полные данные", "Details", new { id = item.Id }, new { id = "empItem" }) |
                @if (User.IsInRole("admin"))
                {
                    @Html.ActionLink("Удалить", "Delete", new { id = item.Id }, new { onclick = "return confirm('Вы уверены?');" })
                }
            </td>
        </tr>
    }
 
</table>
 
<script type="text/javascript">
    $(function () {
        $.ajaxSetup({ cache: false });
        $("#empItem").click(function (e) {
            e.preventDefault();
            $.get(this.href, function (data) {
                $('#dialogContent').html(data);
                $('#Dialog').modal('show');
            });
        });
    });
</script>
Действие в контроллере
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
[HttpGet]
        public ActionResult Details(int? id)
        {
            if (id == null)
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
 
            Employee employee = db.Employees.Find(id);
 
            if (employee == null)
                return HttpNotFound();
 
            return PartialView("_Details", employee);
        }
Ну и соответственно PartialView _Details.cshtml
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@model Models.Employee
<div class="modal-content">
    <div class="modal-header">
        <button class="close" data-dismiss="modal" area-hidden="true">X</button>
        <p>Данные на сотрудника:</p>
    </div>
    <div class="modal-body">
        <table class="table">
            <tr>
                <th>@Html.DisplayNameFor(model => model.ManInfo.SecondName)</th>
                <th>@Html.DisplayNameFor(model => model.ManInfo.FirstName)</th>
                <th>@Html.DisplayNameFor(model => model.ManInfo.MiddleName)</th>
            </tr>
            <tr>
                <th>@Html.DisplayFor(model => model.ManInfo.SecondName)</th>
                <th>@Html.DisplayFor(model => model.ManInfo.FirstName)</th>
                <th>@Html.DisplayFor(model => model.ManInfo.MiddleName)</th>
            </tr>
        </table>
    </div>
</div>
 
}


В чем проблема: Если в списке (откуда вызывается всплывающее окно) более 1 записи, то по клику на 1 запись - всегда будет всплывающее окно. А по клику на 2й и следующих записях окно не появляется, а осуществляется переход на запрошенную страницу (а это PartialView).

Также ещё один момент: Если несколько раз вызывать всплывающее окно на 1 записи - оно будет стабильно появляться.

Кто может подсказать в чем моя проблема?

Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2016, 09:14
Ответы с готовыми решениями:

Модальное окно со слайдом картинок jquery
Здравствуйте, помогите разобраться! Задача: в модальное окно загружать картинки, но картинки...

Не закрывается модальное окно и распознование кнопок
Есть 2 вопроса: 1) Создал стандартный шаблон и решил регистрацию запихнуть в модальное окно. В...

Как при AJAX запросе открыть модальное окно
Запрос @Ajax.ActionLink(&quot;Детали&quot;, &quot;Details&quot;, &quot;Admin&quot;, new { id = item.ID }, new...

При ошибки валидации (на стороне сервера) вернуться на модальное окно
Можно ли при ошибки валидации(на стороне сервера) вернуться на модальное окно? Или надо реализовать...

4
.NET C#,ASP.NET MVC
Эксперт .NET
595 / 506 / 225
Регистрация: 16.10.2010
Сообщений: 1,902
20.10.2016, 21:18 2
Лучший ответ Сообщение было отмечено bodynar как решение

Решение

bodynar, проблема в том что у вас генерируются элементы в однаковым ид "#empItem" в цикле, а так как вы устаналиваете евент клика после загрузки страницы возникает путаница.

вам нужно создать функцию обработчик клика, и использовать ее

Javascript
1
2
3
4
5
6
function myClickHandler(element) {
            $.get(element.href, function (data) {
                $('#dialogContent').html(data);
                $('#Dialog').modal('show');
            });
    }
HTML5
1
@Html.ActionLink("Полные данные", "Details", new { id = item.Id }, new { @onclick="myClickHandler(this)" })
1
340 / 302 / 135
Регистрация: 14.03.2015
Сообщений: 1,120
Записей в блоге: 1
20.10.2016, 23:22  [ТС] 3
lvlkoo, Спасибо.

Ваше исправление помогло.. почти.

Теперь на каждом элементе задний фон затеняется как при отображении модального окна и сразу происходит переход по ссылке.

Я думаю проблема в том, что в скрипте отсутствует строка
Javascript
1
e.preventDefault();
Но я пока что слаб в js\jq и не совсем понимаю откуда взять эту переменную.

Добавлено через 6 минут
lvlkoo, Прошу простить. Секунда гугла решила проблему.
HTML5
1
@Html.ActionLink("Полные данные", "Details", new { id = item.Id }, new { @onclick = "myClickHandler(event, this)" })
Javascript
1
2
3
4
5
6
7
8
function myClickHandler(event, element) {
        $.ajaxSetup({ cache: false });
        event.preventDefault();
        $.get(element.href, function (data) {
            $('#dialogContent').html(data);
            $('#Dialog').modal('show');
        });
    }
0
.NET C#,ASP.NET MVC
Эксперт .NET
595 / 506 / 225
Регистрация: 16.10.2010
Сообщений: 1,902
21.10.2016, 00:16 4
bodynar, вообще подобное делаеться не с помощью actionlink, так как он генерирует ссылку, можной обойтись без e.preventDefault(), написав А тег как

HTML5
1
<a href="#/" onclick = "myClickHandler(this)">Полные данные</a>
Так будет правильнее

И таким образом вы в принципе можете передать нужный вам ид как аргумент функции

HTML5
1
<a href="#/" onclick = "myClickHandler('@item.Id)">Полные данные</a>
Javascript
1
2
3
4
5
6
function myClickHandler(id) {
        $.get('/MyController/Details/' + id, function (data) {
            $('#dialogContent').html(data);
            $('#Dialog').modal('show');
        });
    }
2
Lutk
26.10.2016, 11:48     Модальное окно не открывается
  #5

Не по теме:

Я бы вообще тэг A не использовал, ибо можно ткнуть "пкм -> открыть в новой вкладке" и получить не то, что подразумевалось. Либо уж пусть содержит корректную ссылку на отдельную страницу, но при обычном щелчке открывает модальное окно.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2016, 11:48

Создать модальное окно (дочернее окно) как в одноклассниках
Здраствуйте всем, Нужна помощь. Я хочу создать модальное окно (дочерное окно) в ASP.NET на примере...

Модальное окно
Доброго времени суток! Уважаемые форумчане помогите разобраться с проблемой. Есть кнопка:...

Подскажите как создается модальное окно
Как можно создать модальное окно, которое бы блокировало выполнение приложения до нажатия на ньом...

Как можно открыть модальное окно без кнопки 'close window'?
Кто знает как можно открыть модальное окно без кнопки 'close window'.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru