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

Как передать данные из dropdownlist в контроллер через модель данных

19.09.2022, 17:25. Показов 1769. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Мне нужно передать данные из списка в контроллер через модель. В представлении есть еще один список (Гендер), из него все отлично через модель передается, а из Специализации ничего. Вроде бы все одинаково написано, подскажите, что не так пожалуйста.
Если возможно не через модель передать, подскажите пожалуйста как. Я пробовал дроп даун листу присвоить id и по тому же имени id в метод в контроллер передать - не вышло.

Model:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public partial class User
    {
        public User()
        {
            this.Requests = new HashSet<Request>();
        }
    
        public int ID { get; set; }
        public string Surname { get; set; }
        public string Name { get; set; }
        public int Gender { get; set; }
        public int Specialization { get; set; }
        public string Email { get; set; }
 
        public string Password { get; set; }
 
        public bool Admin { get; set; }
    
        public virtual Gender Gender1 { get; set; }
 
        public virtual ICollection<Request> Requests { get; set; }
        public virtual Specialization Specialization1 { get; set; }
    }
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<main>
            <div class="login-block">
                
                    <div class="form-group">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="ti-user"></i></span>
                            <input type="text" id="Surname" name="Surname" class="form-control" placeholder="Фамилия" required>
                        </div>
                    </div>
 
                    <hr class="hr-xs">
 
                    <div class="form-group">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="ti-user"></i></span>
                            <input type="text" id="Name" name="Name" class="form-control" placeholder="Имя" required>
                        </div>
                    </div>
 
                    <hr class="hr-xs">
//Данные отсюда передаются
                    <div class="form-group">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="ti-user"></i></span>
                            <div style="left:2px">
                                @Html.DropDownList("selectedGenderID", (SelectList)ViewBag.Gender @*new { @class = "form - control selectpicker" }*@)
                            </div>
                        </div>
                    </div>
 
                    <hr class="hr-xs">
//Данные отсюда не передаются
                    <div class="form-group">
                        <div class="input-group">
                            <span class="input-group-addon">@*<i class="ti-user"></i>*@</span>
                            @Html.DropDownList("selectedSpecializationID", (SelectList)ViewBag.Special)
                        </div>
                    </div>
 
                    <hr class="hr-xs">
 
                    <div class="form-group">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="ti-email"></i></span>
                            <input type="email" class="form-control" id="Email" name="Email" placeholder="Адресс электронной почты" required>
                        </div>
                    </div>
 
                    <hr class="hr-xs">
 
                    <div class="form-group">
                        <div class="input-group">
                            <span class="input-group-addon"><i class="ti-unlock"></i></span>
                            <input type="password" class="form-control" id="Password" name="Password" placeholder="Введите пароль" required>
                        </div>
                    </div>
 
                    <button class="btn btn-primary btn-block" type="submit">Регистрация</button>
        </main>
Controller:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public ActionResult Reg(User user)
        {
            
            User new_user = new User
            {
                Surname = user.Surname,
                Name = user.Name,
                Gender = user.Gender,
//Здесь 0 приходить вместо выбранного значения
                Specialization = user.Specialization,
                Password = user.Password,
                Email = user.Email,
                Admin = false
            };
            db.Users.Add(new_user);
 
            db.SaveChanges();
            
            return View("Reg");
 
        }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.09.2022, 17:25
Ответы с готовыми решениями:

Как передать значение DropDownList в контроллер
Прошу помощи я новичок в работе с MVC. Мне нужно передать значение DropDownList в контроллер и по этому значению отсортировать таблицу...

Как в MVC 4 передать выбранные данные из dropdownlist на другую страницу?
Как в MVC 4 передать выбранные пользователем данные из dropdownlist на другую страницу? public ActionResult Index( Group_Table gr) ...

Как передать данные с представления в контроллер?
Всем доброго времени суток ;) Подскажите, пожалуйста, какой код нужно написать внутри тега &lt;li&gt;&lt;/&lt;li&gt;, чтобы получился...

7
HF
 Аватар для HF
1303 / 882 / 199
Регистрация: 09.09.2011
Сообщений: 2,590
Записей в блоге: 2
19.09.2022, 18:46
Пролог-ревью.

Цитата Сообщение от AlexPes Посмотреть сообщение
Здесь 0 приходить вместо выбранного значения
1. Так как списков не предоставили, то будем гадать. Вдруг там и правда есть Id=0.

2. Если здесь сделано через Helper то почему не сделано в одном стиле? для input? Html.TextBoxFor вроде всё просто и логично. Если не нравятся хелперы, то делайте и меню через разметку - тоже ведь обычный подход. Обычный цикл и все.

3.
C#
1
2
3
4
public ActionResult Reg(User user)
        {
            
            User new_user = new User
Нет смысла так делать. Модель уже пришла. И будет добавлена в том же виде.
Достаточно было прописать Admin=false и всё. (И то только для того чтобы предохраниться от хакеров)

4. Html.DropDownList("selectedGenderID" и по Specialization
А почему кастомные идентификаторы? К ним доступ через JS? Если да, то сомнения о корректности конечных значений.

5. (SelectList)ViewBag.Gender
Если это int, то что получилось в итоге? Откуда там взялся список, в примере нет.
И там же, (SelectList)ViewBag.Special - в примере нет такого.

Ставлю под сомнение весь ваш вопрос.
0
2 / 2 / 0
Регистрация: 08.03.2020
Сообщений: 141
19.09.2022, 19:38  [ТС]
1. 0 передать список не должен, там id>6.
2 и 3 понял ваши замечания
4. не знаю, что означает термин "кастомные идентификаторы". На самом деле с js тут нет связи, просто имя списка нужно было. Возможно хотел когда-то сделать, но не доделал.
5. В контроллере я объявил и выгрузил список, пример данных приложу с картинкой. Получилось так, что пользователь видит название (Name), а сохраняется ID этого названия.

Почему все-таки выбранные данные из одного списка передаются в контроллер, а у другого нет?
Миниатюры
Как передать данные из dropdownlist в контроллер через модель данных  
0
HF
 Аватар для HF
1303 / 882 / 199
Регистрация: 09.09.2011
Сообщений: 2,590
Записей в блоге: 2
19.09.2022, 20:02
Цитата Сообщение от AlexPes Посмотреть сообщение
4. не знаю, что означает термин "кастомные идентификаторы". На самом деле с js тут нет связи, просто имя списка нужно было. Возможно хотел когда-то сделать, но не доделал.
Ну тогда модель и должна быть привязана на своё свойство
C#
1
@Html.DropDownList(x => x.Gender, ...
Цитата Сообщение от AlexPes Посмотреть сообщение
5. В контроллере я объявил и выгрузил список, пример данных приложу с картинкой. Получилось так, что пользователь видит название (Name), а сохраняется ID этого названия.
Где коллекции? Вопрос выше.
- коллекция Гендеров - это не коллекция а Один вариант. (выяснили кол-ция из вьюбаг)
- коллекции Специализаций не видно. Будем считать что они есть. (выяснили кол-ция из вьюбаг)

Предполагаю вариант
- из-за того что первый список ещё как-то магически мог стриггерить в нужное значение. Например потому что он по названию подошёл для модели без конфликтов (вы же ИД поменяли). Но тоже есть предположения что выбор то не работает. Первое значение небось берётся по умолчанию всегда.
- то второй список точно никак не должен резовиться. потому что у него ИД неверный

Добавлено через 3 минуты
Кстати, вот вам информация для работы, если вы ещё не знаете.

Откройте браузер, откройте консоль разработчика, "Network".
Заполните форму, отправьте запрос.

И увидите, что у вас отправляются успешные данные но с ключами selectedGenderID и selectedSpecializationID.
А когда они будут соответствовать модели, то и биндиться будут верно.
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
19.09.2022, 20:11
Цитата Сообщение от AlexPes Посмотреть сообщение
Получилось так, что пользователь видит название (Name), а сохраняется ID этого названия.
Так и должно быть, на сервер передается атрибут value выбранного option-а в разметке.
И этот value присваивается свойству модели. И выше уже сказали, что привязка идет к свойству модели.
Чтобы ответить на вопрос, почему Specialization не получает значения при отправке формы, нужно знать как вы формируете
вот это:
C#
1
(SelectList)ViewBag.Special
0
2 / 2 / 0
Регистрация: 08.03.2020
Сообщений: 141
19.09.2022, 20:35  [ТС]
Вот так:

C#
1
2
ViewBag.Gender = new SelectList(db.Genders, "ID", "NameOfGender");
ViewBag.Special = new SelectList(db.Specializations, "ID", "Name");
Таблицу Specialization в скрине в прошлом ответе упомянул
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
19.09.2022, 21:08
Лучший ответ Сообщение было отмечено AlexPes как решение

Решение

Поправьте вот это:
C#
1
@Html.DropDownList("selectedSpecializationID", (SelectList)ViewBag.Special)
вот на это:
C#
1
@Html.DropDownList("Specialization", (SelectList)ViewBag.Special)
Добавлено через 2 минуты
И вам уже не сказали - не нужно создавать нового User-а, он и так создается неявно с помощью ModelBinding.
Хотя для таких вещей рекомендуют создавать отдельный слой Dto/Request-моделей. Но для начала и так пойдет.

Цитата Сообщение от IamRain Посмотреть сообщение
И выше уже сказали, что привязка идет к свойству модели.
=>
Цитата Сообщение от IamRain Посмотреть сообщение
Specialization
1
2 / 2 / 0
Регистрация: 05.04.2015
Сообщений: 12
11.03.2024, 21:41
Проблема такая же была, это было ппц как мучительно, но нашел ошибку. В метаните написано что при использовании навигационных свойств, свойство ****Id можно упустить, потому что при объявлении объекта, оно и так создается. (Там же написано что оно иногда требуется).
Так вот свойство ****Id обязательно для dropdownlist.
И тут ребята акцент сделали на этом так что спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.03.2024, 21:41
Помогаю со студенческими работами здесь

Как передать в контроллер не только данные с формы?
Всем добра! У меня есть страница товара (singlpage), и на ней есть небольшая форма, в которой пользователь выбирает размер и количество...

Как передать данные с представления на контроллер при нажатии на кнопку?
Я только неделю назад решил и у меня проблемка. Помогите розобраться как передать даные с представления на контроллер при нажатии на...

Как установить данные во втором DropDownList в зависимости от выбранного раздела в первом DropDownList
Недавно только за ASP.NET сел, не понимаю как работают html хелперы. В контроллере передаю два SelectedList`a во View. public...

Передать в контроллер модель и файл без перезагрузки
$('#progressSubmit').click(function (e) { e.preventDefault(); var model = $('#progressForm').serialize(); ...

Как передать массив данных в контроллер
У меня есть таблица с продуктами и у этих продуктов есть код Мне нужно передать в метод через url массив этих кодов разных продуктов ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
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