Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/34: Рейтинг темы: голосов - 34, средняя оценка - 4.94
2 / 2 / 0
Регистрация: 08.03.2020
Сообщений: 141

Обработка данных в представлении функцией(методом)

02.06.2021, 16:20. Показов 6855. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Даже не знаю, правильно ли я заголовок задала, попробую описать ситуацию.
Я пытаюсь реализовать регистрацию пользователя. Мне нужно сделать проверку: если введенная электронная почта уже есть в БД, то система должна уведомить об этом пользователя и попросить ввести другую, если почты нет в базе - данные о пользователе заносятся в БД.

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

Я думаю, что было бы лучше, если наличие записи в БД проверялось бы в самом представлении. У меня есть такая задумка: Я хотела сделать кнопку еще одну в представлении, которая при нажатии будет проверять, есть ли такая почта в БД. Если есть: на этой же форме выводится сообщение, что такая почта уже есть. Если почты нет еще в базе: кнопка для сохранения данных становится доступной, сообщение какое-нибудь выходит по типу "Почта свободна" и новой пользователь в БД добавляется.

Для этого,вероятно, нужно код для проверки записи в бд запихнуть в представление, а как это сделать - я не знаю. Ищу в инете: натыкаюсь на script вставки, я как понимаю это на JS, а я его не знаю. Можно как-то сделать вставку функции на C#? или даже на JS, просто покажите пожалуйста пример, как их нужно делать, не могу выявить закономерность. Подскажите пожалуйста, не могу придумать ничего 3-ий день.

Ниже код, который у меня сейчас есть.
Контроллер:
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
[HttpPost]
        public ActionResult Reg(StaffVolunteer sv)
        {
            ViewBag.Gender = new SelectList(db.Genders, "GenderID", "NameOfGender");
            StaffVolunteer search = db.StaffVolunteers.FirstOrDefault(x => x.Email == sv.Email);
            if (search == null)
            {
                int super = 0;
                int gen = 0;
                if (Request.Form["IsSuperUser"] == "SuperYes")
                    super = 1;
                else super = 0;
 
                if (Request.Form["Gender"] == "женский")
                    gen = 0;
                else gen = 1;
                StaffVolunteer volun = new StaffVolunteer
                {
                    Surname = sv.Surname,
                    Name = sv.Name,
                    Patronymic = sv.Patronymic,
                    DateOfBirth = sv.DateOfBirth,
                    Gender = gen,
                    PhoneNumber = sv.PhoneNumber,
                    Email = sv.Email,
                    Password = sv.Password,
                    BeReady = true,
                    SuperUser = super
                };
                db.StaffVolunteers.Add(volun);
                db.SaveChanges();
                return View("Auth");
            }
            else
            {
                return View("Reg");
            }
           
        }
Представление
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
50
51
52
53
54
55
56
57
58
59
@model Practice2021.StaffVolunteer
 
@{
    ViewBag.Title = "Create";
}
@{
    Layout = null;
}
<head>Регистрация нового волонтера</head>
<body>
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
 
    @*@Html.LabelFor(model => model.Surname, "Фамилия") )*@
    <input type="text" class="form-control" id="Surname" name="Surname" placeholder="Фамилия" required>
    <br />
    @*@Html.LabelFor(model => model.Name, "Имя")*@
    <br />
    <input type="text" class="form-control" id="Name" name="Name" placeholder="Имя" required>
    <br />
    <div>Дата рождения </div>
    <input type="date" name="DateOfBirth" value="2000-01-01" max="[@DateTime.Today]" required="required">
    <br />
    <br />
    <div class="form-group">
        <p>
            @Html.LabelFor(model => model.Gender, "Пол")
            @Html.DropDownList("Gender", null, htmlAttributes: new { @class = "form-control" })
        </p>
    </div>
    <div>Номер телефона </div>
    <input type="tel" class="form-control" id="PhoneNumber" name="PhoneNumber" pattern="^((\+7|7|8)+([0-9]{10}))$" placeholder="+7 (900) 123-45-67" required>
    <br />
    <br />
    <div>E-mail </div>
    <br />
    <input type="text" class="form-control" id="Email" name="Email" placeholder="E-mail" required>
    <br />
    <br />
    <div>Пароль </div>
    <br />
    <input type="text" class="form-control" id="Password" name="Password" placeholder="Пароль" required>
    <br />
    <br />
    @Html.LabelFor(model => model.SuperUser, "Зарегистрироваться как администратор?")
    <br />
    <p><input class="form-check-input" type="radio" value="SuperYes" name="IsSuperUser" id="SuperYes"> Да </p>
    <p><input class="form-check-input" type="radio" value="SuperNo" name="IsSuperUser" id="SuperNo" checked> Нет </p>
    <br />
    <br />
    <p><a class="addLink"> Проверить e-mail на уникальность</a></p>
    <input type="submit" value="Сохранить данные" />
}
 
<div>
    <p>Есть учетная запись? @Html.ActionLink("Войти", "Auth", "Volunteer") </p>
</div>
</body>
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.06.2021, 16:20
Ответы с готовыми решениями:

Использование пакета с функцией в представлении
Как использовать пакет с функцией возвращающую дату в представлении(view)? Желательно с примером, хочу посмотреть на синтаксис.

Методом наименьших квадратов аппроксимировать табличные значения линейной функцией и функцией
Помогите, пожалуйста Функция задана своими табличными значениями: X Y 0,44 2,59 0,49 2,34 0,55 2,11 0,63 1,88 0,68 1,76 ...

Обработка данных из формы методом POST
Здравствуйте. Столкнулся с небольшой трудностью: Есть файл index.jsp, которая вводит логин и пароль. Метод формы POST. Обработчик...

9
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
02.06.2021, 17:07
AlexPes,
.. если вы хотите прикручивать к шаблонному MVC "перламутровые пуговицы" в виде подобных проверок (а вы непременно этого захотите в дальнейшем), то учить Javascript все равно придется, увы (или к счастью, кому как ) ... В качестве первой прикидки можно использовать autocomplete/автозаполнение, вариантов которых много, вот один из примеров от индийских товарищей в связке с MVC:
Creating AutoComplete TextBox In ASP.NET MVC 5
.. в данном случае пользователь по мере заполнения поля Email будет видеть в подсказках уже существующие зарегистрированные почты и соответственно создавать свою уникальную ... Этот скрипт можно модифицировать и дальше, но понимать Javascript/JQuery все равно придется ...
1
2 / 2 / 0
Регистрация: 08.03.2020
Сообщений: 141
02.06.2021, 17:12  [ТС]
carrotik, эта проверка даже не мое желание, просто очень неудобно, если каждый раз при проверке будет вся введенная инфа сбрасываться, а если я не проверю - БД сломается. js планирую изучить, просто сейчас времени впритык, некогда изучать. Спасибо за ссылку!
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
02.06.2021, 17:52
AlexPes,
Есть клиентская и есть серверная валидации.
Для почты Вы хотите сделать валидацию на клиенте ? Т.е. проверять Email на наличие в БД на клиенте ?
Легко. Для этого Вам нужно в страничку регистрации сунуть весь список имеющихся в базе "мыл".
Это можно сделать через разметку (<ul>-<li> либо <select>-<option>) в hidden-блоке, а затем сверяться с этими списками
в коде валидации JS. Можно даже делать контекстную подстановку "по-индийски". А можно "стрелять" ими Json-ом.

Однако есть два "но".
1. Пока страничка будет висеть в браузере клиента, в базе могут произойти изменения - какие-то "мыла" удалятся, а какие-то добавятся. При этом на клиенте об этом "ни слуху, ни духу".
2. Если в базе сотни (тысячи, десятки тысяч) "мыл", все они весело повалятся в Сеть и на устройство Клиента, тормозя все на свете.

И да, в любом случае надо JS - без него на Клиенте ну никуда

Добавлено через 1 минуту
Цитата Сообщение от AlexPes Посмотреть сообщение
если каждый раз при проверке будет вся введенная инфа сбрасываться
Инфа и не должна "сбрасываться" - Вы криво сделали регистрацию.
0
800 / 583 / 207
Регистрация: 21.02.2019
Сообщений: 2,095
02.06.2021, 18:02
Цитата Сообщение от MsGuns Посмотреть сообщение
Если в базе сотни (тысячи, десятки тысяч) "мыл", все они весело повалятся в Сеть и на устройство Клиента, тормозя все на свете.
.. да не надо всю базу тащить, автозаполнение с контроллером работает ... Но это варианты и вкусовщина ... Потом ТС понадобится еще проверять сам email на валидность (а это regex, как ни крути) ...
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
02.06.2021, 18:15
Цитата Сообщение от carrotik Посмотреть сообщение
автозаполнение с контроллером работает
По каждому oninput летит на сервер асинхрон и там выбор по like.. с последующим JS-кодом для вставки ответа в вплывающий комбобокс..
Ага, очень остроумно

Добавлено через 8 минут
У меня только вопрос: с какой стати регистрирующемуся юзеру показывать какие-то данные других зарегистрированных пользователей, в частности адрес почты ?
0
2 / 2 / 0
Регистрация: 08.03.2020
Сообщений: 141
02.06.2021, 21:28  [ТС]
MsGuns,
Цитата Сообщение от MsGuns Посмотреть сообщение
Для этого Вам нужно в страничку регистрации сунуть весь список имеющихся в базе "мыл".
Это можно сделать через разметку (<ul>-<li> либо <select>-<option>) в hidden-блоке, а затем сверяться с этими списками
в коде валидации JS.
Можете пожалуйста пример написать, если не сложно? плохо еще представляю все эти действия в серверных приложениях
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
02.06.2021, 22:21
AlexPes,
Т.е. Вы хотите в стартовой страничке регистрации получить весь список "мыл" из БД ?

Добавлено через 3 минуты
Но при этом юзер не должен его видеть и использоваться он будет только при проверке JS-кодом ?
Эта плохая идея, т.к. есть еще и третий недостаток: любой юзер может легко подсмотреть всю базу мыл, просто открыв окно кода в браузере.
0
2 / 2 / 0
Регистрация: 08.03.2020
Сообщений: 141
02.06.2021, 23:07  [ТС]
MsGuns, пока так, да. у меня задача учебная, нигде использоваться не будет, потому что БД на локальном сервере, максимум 50 записей будет хранить.

Добавлено через 43 минуты
MsGuns, а их нельзя как-нибудь спрятать? свойство hidden уже бессильно здесь, оно только от пользователя инфу скрывает? Как все непросто то... не знаю, что и делать
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
03.06.2021, 00:10
AlexPes, Вам же нужно без JS ? Вариант с проверкой на клиенте не реализуется никак. От слова совсем.
Без JS можно реализоваться с серверной проверкой. Т.е. по получении заполненной формы (точнее не самой формы, конечно, а параметров со значениями в http) сервер проверяет мыло и, если его нет, то добавляет в базу нового пользователя и возвращает Главную страничку, а если есть, возвращает заполненную (как была) страничку с формой и с сообщением где-нибудь внизу о наличии мыла в базе, т.е. ошибку. В этом случае JS вообще не требуется.

Добавлено через 3 минуты
Цитата Сообщение от AlexPes Посмотреть сообщение
а их нельзя как-нибудь спрятать
Можно. Один из вариантов: после загрузки страницы JS забирает все мылы из списка в массив, а сам список уничтожает.
Для проверки используется этот массив.

Добавлено через 2 минуты
Но, повторюсь, проверка на клиенте чисто серверной информации - чисто дубовая технология.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.06.2021, 00:10
Помогаю со студенческими работами здесь

Обработка нажатой кнопки в представлении
Доброго вечера, господа, подскажите пожалуйста, как в представление правильно сделать вылавливание нажатой в текстовом поле кнопки,...

MVC обработка массива в представлении
привет есть код: $title = &quot;hello&quot;; $Prod = array(&quot;dsfs&quot;,&quot;wewe&quot;,&quot;ewrwed&quot;); и представление: &lt;body&gt; &lt;div...

Динамическое добавление inout на представлении и обработка в контроллере
Ребят, вопрос такой: Допустим я добавляю новый продукт - есть определенная форма, но надо чтобы человек если захотел мог добавить новое...

Обработка входных параметров функцией
Приветствую. Начала изучать C++. Читаю Страуструпа. Заголовочный файл, что прикладывался к книге - не работает. Так что некоторые вопросы...

Обработка функцией нескольких переменных
Как функцией обрабатывать сразу несколько переменных? Есть три переменных: data1 data2 data3 Переменные содержат текст. ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru