Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Alexey437
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 35
1

Покритикуйте решение

15.03.2017, 10:17. Просмотров 418. Ответов 5
Метки нет (Все метки)

Задача такая. Есть страница с неким списком предметов, берущимся из БД. На ней есть кнопка "Добавить", при нажатии на нее должно появиться модальное окно с полем ввода. В это поле можно ввести число n, нажать "ОК", тогда модальное окно естественно исчезает, а в БД прибавляется n новых строк (и соответственно в списке они тоже должны появиться). Я полдня голову ломал, придумал такое:

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
41
42
43
44
45
46
47
48
49
@model MyClass
 
@using (Html.BeginForm())
{
    ...
    <button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
        Показать модальное окно
    </button>
    <p>
        ...
        <input style="display: none;" type="submit" id="btnsubmit" name="btn_submit" value="отправить"/>
        <input style="display: none;" type="hidden" id="count" name="count" value=""/>
        <input style="display: none;" type="hidden" id="typeId" name="typeId" value="" />
    </p>
}
 
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myLabel">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                <h4 class="modal-title" id="myLabel">Заголовок</h4>
            </div>
            <div class="modal-body">
                <dl class="dl-horizontal">
                    Введите число
                    <br/>
                    <p>@Html.TextBox("MyCnt", "", new { id = "CntTextBox"})</p>
                </dl>
            </div>
            <div class="modal-footer">
                <button type="submit" id="AddOk" class="btn btn-primary" data-dismiss="modal">OK</button>
                <button type="button" class="btn btn-default" data-dismiss="modal">Отмена</button>
            </div>
        </div>
    </div>
</div>
 
@section scripts
{
    <script type="text/javascript">
        $('#AddOk').click(function() {
            var cnt = $('#CntTextBox').val();
            $('#count').attr('value', cnt);
            $('#typeId').attr('value', @Model.Id);
            $('#btnsubmit').click();
        });
    </script>
}
то есть данные из модального окна передаются на основную страницу через скрытое поле, потом имитируется нажатие на "Отправить" и тогда вызывается post-метод контроллера, который и добавляет строки в базу, а потом заново загружает это представление. Все работает как надо, но у меня почему-то подозрение, что это кривой способ и это должно делаться как-то проще.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2017, 10:17
Ответы с готовыми решениями:

Протестируйте и покритикуйте сайт
сделал часть раздела на сайте: www.rusnetusa.com ravel что скажете? Принимаю любую критику ...

Задачи на SQL. Решение. Покритикуйте
Задачи на SQL. Решение. Покритикуйте Ответы в Google Docs: Задачи на SQL. Решение....

Задачи на строки и числа. Решение. Покритикуйте
Задачи: Привет, решение данных заданий на Java - см. ссылку ниже. Покритикуйте. import...

Задачи на числа. Решение. Покритикуйте. (часть №1)
Привет, решение данных заданий на Java - ниже. Покритикуйте. package chapt01.b; import...

Задачи на Servlets и JSPs. Решение. Покритикуйте
Задачи на сервлеты. Покритикуйте: Задача 1. Код наиболее последней версии тут:...

5
Usaga
Эксперт .NET
5930 / 4191 / 737
Регистрация: 21.01.2016
Сообщений: 16,389
Завершенные тесты: 2
15.03.2017, 12:07 2
Alexey437, да, решение кривое.

Оно не было бы кривым, если бы не пыталось косить под SPA использованием модального окна. А так и не вашим и не нашим.

Посмотри в сторону такой библиотечки (она небольшая и не очень сложная) как KnockoutJS. Она позволяет отделить разметку от кода (на клиенте, естественно) и обновлять UI без перезагрузки страницы. Соответственно, отправку данных на сервер нужно будет сделать с помощью аякса (AJAX), так же без перезагрузки страницы.

Будет и краше и правильнее.
1
Alexey437
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 35
15.03.2017, 12:14  [ТС] 3
Usaga, при твоем варианте, насколько я понимаю, модального окна не будет? Я его использовал не потому что под что-то кошу (я пока не знаю что такое SPA), а потому что у меня такое ТЗ. То есть модальное окно нужно. Но нельзя ли с модальным окном сделать менее криво?

За ссылку спасибо, учту на будущее, но в данном случае надо с модальным окном.
0
Usaga
Эксперт .NET
5930 / 4191 / 737
Регистрация: 21.01.2016
Сообщений: 16,389
Завершенные тесты: 2
15.03.2017, 12:24 4
Цитата Сообщение от Alexey437 Посмотреть сообщение
при твоем варианте, насколько я понимаю, модального окна не будет?
Эта библиотечка не ограничивает тебя в решении твоей задачи. Хочешь модаль, хочешь не модаль. Её всё равно, как скажешь, так и сделает.

Суть в том, что ты свои "предметы" не напрямую на страницу выведешь, а в модель представления передашь в JS. Библиотечка уже это дело выведет на странице. Когда ты новые "предметы" будешь добавлять, то отправишь запрос на сервер (после закрытия модалки по OK), а потом добавишь их в модель представления, а библиотека уже всю разметку (где надо) обновит.

И никаких перезагрузок страницы.

Добавлено через 1 минуту
SPA - single page application. Веб-приложение, работающее в рамках одной страницы, без перезагрузок.

Добавлено через 2 минуты
Ну или можно использовать стандартные средства ASP.NET MVC для асинхронных запросов - Ajax.BeginForm. Но это не лучше и не проще.
0
Alexey437
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 35
15.03.2017, 13:02  [ТС] 5
Usaga, спасибо, попробую разобраться с библиотекой.

В моем решении меня больше не перезагрузка смущает, а то, что приходится создавать какие-то лишние невидимые элементы и через них передавать значения. Или это нормальная практика?
0
Usaga
Эксперт .NET
5930 / 4191 / 737
Регистрация: 21.01.2016
Сообщений: 16,389
Завершенные тесты: 2
15.03.2017, 13:20 6
Alexey437, абсолютно нормальная практика.
1
15.03.2017, 13:20
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2017, 13:20

Покритикуйте - ка!:)
Покритикуйте - ка!:) www.izobret.tu1.ru

Покритикуйте
Приветствую всех. В сфере продвижения и оптимизации я относительно недавно. Сайт прогнал по...

Покритикуйте
нужна критика по дизайну http://www.unitytrans.ru/


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru