Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 675

Валидация в модальном окне

12.12.2016, 16:01. Показов 3679. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
DiskType.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
24
25
@model autoParts.Models.DiskTypeModel
 
<div id="add-disk-type" class="modal fade">
    <div id="dialog-content" class="modal-dialog"></div>
</div>
<div class="form-inline pull-left">
    <a class="btn btn-primary" onclick="javascript: ShowDiskTypeModal()">Добавить</a>
</div>
<div class="row-eq-height">
    @if (Model.Count > 0)
    {
        foreach (var item in Model.DiskType)
        {
            <div class="col-xs-12 col-sm-6 col-md-4 col-lg-4">
                <div class="card">
                    <div class="card-image">
                        <div class="card-content">
                            <h5 class="card-title">@item.Type - @item.Id</h5>
                        </div>
                    </div>
                </div>
            </div>
        }
    }
</div>
DiskTypeModal.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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@model autoParts.Models.DiskType
@using (Ajax.BeginForm("DiskType", "Admin",
    new AjaxOptions
    {
        HttpMethod = "POST",
        InsertionMode = InsertionMode.Replace,
        UpdateTargetId = "content",
        OnSuccess = "OnSuccessDiskTypeModal()"
    }))
{
    <div class="modal-content">
        <div class="modal-header">
            <button class="close" data-dismiss="modal" area-hidden="true">X</button>
            @if (!string.IsNullOrEmpty(Model.Type))
            {
                <h3>Редактирование данных</h3>
            }
            else
            {
                <h3>Добавление записи</h3>
            }
        </div>
        <div class="modal-body">
            @Html.AntiForgeryToken()
            @Html.HiddenFor(m => m.Id)
 
            <div class="editor-label">
                @Html.LabelFor(m => m.Type)
            </div>
            <div class="editor-field">
                @Html.EditorFor(m => m.Type)
                @Html.ValidationMessageFor(m => m.Type, string.Empty, new {@class = "error"})
            </div>
        </div>
        <div class="modal-footer">
            <input type="submit" class="btn btn-success" value="Добавить" />
            <a href="#" class="btn" data-dismiss="modal" area-hidden="true">Закрыть</a>
        </div>
    </div>
}
C#
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
38
39
40
41
42
43
44
45
46
47
48
49
public async Task<ActionResult> DiskType(DiskType model)
        {
            if (!ModelState.IsValid)
                return View();
                //return Json(new
                //{
                //    //partialView = RenderPartialToStringExtensions.RenderPartialToString(this, "", model),
                //    isValid = false
                //});
            TypeDisk type = await DiskQueries.Create(_context).GetByDiskType(model.Type, null);
 
            if (model.Id == 0)
            {
                //добавление
                if (type == null)
                {
                    type = await Disks.Create(_context).AddDiskType(model);
                    if (type != null)
                    {
                        return View();
                        
                    }
                    ModelState.AddModelError("", "Данный тип не был добавлен.");
                }
                else
                {
                    ModelState.AddModelError("", "Данный тип уже существует.");
                }
            }
            else
            {
                //изменение
                if (type == null)
                {
                    type = await Disks.Create(_context).EditDiskType(model);
                    if (type.Type == model.Type)
                    {
                        return View();
                    }
                    ModelState.AddModelError("", "Данный тип не был изменен.");
                }
                else
                {
                    ModelState.AddModelError("", "Данный тип уже существует.");
                }
            }
            
            return View();
        }
JavaScript
1
2
3
4
5
6
7
8
9
10
11
function ShowDiskTypeModal() {
    $.ajaxSetup({ cache: false });
    $.get("/admin/DiskTypeModal", function (data) {
        $('#dialog-content').html(data);
        $('#add-disk-type').modal('show');
    });
}
 
function OnSuccessDiskTypeModal() {
    debugger;
}
Как сделать так если никаких ошибок, после добавления модальное окно закрывалось, а при ошибках эти ошибки показывались пользователю.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.12.2016, 16:01
Ответы с готовыми решениями:

Отображение информации в модальном окне
Здравствуйте, вопрос такой - как корректно сделать отображение информации в модальном окне? Т.е. есть экшн &quot;индекс&quot;, кнопка...

Можно ли POSTить форму в модальном окне?
Из основного окна открывается модальное окно, в качестве URL указывается ASP. Subj. Или может кто порекомендует метод решения задачи: У...

галерея в модальном окне
http://highslide.com/examples/gallery-thumbstrip-above вот такую фичу как сделать?может кто-нибудь инфой распологает?

4
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
12.12.2016, 16:40
в ajax ответе просто возвращать результат функции , и , в зависимости от ситуации, javascript-ом показывать или скрывать диалог.
тобишь data содержит не html а json , ну или , как вариант , html - но в котором уже итоговый результат - либо скрипт отображения диалога , либо скрипт закрытия. , хотя это плохая практика , на сервере такие вещи собирать.
0
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 675
12.12.2016, 19:57  [ТС]
Цитата Сообщение от sau Посмотреть сообщение
html - но в котором уже итоговый результат - либо скрипт отображения диалога , либо скрипт закрытия. , хотя это плохая практика , на сервере такие вещи собирать.
Как я понял нужно писать return Json(isValid = ?, message = ?...
От этого возникло 2 вопроса, если ошибок много как их вывести нормально? парсить (типо по спец символу)?
Если всё норм, как закрыть автоматически модальное окно?
0
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
13.12.2016, 06:12
Лучший ответ Сообщение было отмечено Vla00 как решение

Решение

JSON
1
{ success:true/false, errors: [{message: ...},{message:....}]}
на стороне клиента используете json парсер и в итоге работаете с обьектной моделью ответа на запрос.

Добавлено через 1 минуту
Цитата Сообщение от Vla00 Посмотреть сообщение
Если всё норм, как закрыть автоматически модальное окно?
вероятно так $('#add-disk-type').modal('hide'); , модальные окна разные бывают.
1
11 / 11 / 10
Регистрация: 06.10.2012
Сообщений: 675
15.12.2016, 19:47  [ТС]
Цитата Сообщение от sau Посмотреть сообщение
на стороне клиента используете json парсер и в итоге работаете с обьектной моделью ответа на запрос.
Спасибо. Разобрался уже как сделать. Но есть вопрос:
HTML5
1
2
3
4
5
6
@using (Ajax.BeginForm("DiskType", "Admin",
    new AjaxOptions
    {
        OnSuccess = "OnSuccessDiskTypeModal"
    }))
{
JavaScript
1
2
3
function OnSuccessDiskTypeModal(data) {
    debugger;
}
Но в функцию он не заходит, а страница переходит по адресу /Admin/DiskType. В чём проблема? Что не так написал?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.12.2016, 19:47
Помогаю со студенческими работами здесь

Форма в модальном окне
Здравствуйте. Для создания форм я использую компонент ck_forms. Подскажите, как можно сделать модальное окно в Joomla и поместить туда...

Статьи в модальном окне
Здравствуйте. Собственно есть сайт одностраничник: http://sports-consulting.ru/ слайдер новостей выводится при помощи &quot;BT Content...

Fileexplorer в модальном окне
Добрый день ув. пользователи! Подскажите пожалуйста, возможно ли в модальном окне организовать перемещение по директориям с...

Фокус в модальном окне
Здравствуйте, Из главной формы я вызываю модальное окно, в котором есть кнопка и textbox. Хочу, чтобы стоял фокус в тексбоксе...

Слайдер в модальном окне
Добрый день! Подскажите как реализовать слайдер в слайдере. Внешний слайдер всплывающий типа Lightbox popup открывается при нажатии на...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru