0 / 0 / 0
Регистрация: 02.02.2018
Сообщений: 32
1

Почему данные из контроллера в представление передаются, а обратно нет?

22.11.2019, 12:54. Показов 1057. Ответов 4

Author24 — интернет-сервис помощи студентам
Добрый день!

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

Получаю исключение : InvalidOperationException: There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'Fed'.

Что же за ключ я упускаю?

Вот модель, которую пытаюсь сохранить:
C#
1
2
3
4
5
6
7
8
9
 public class GeoSubject
    {
        [Key]
        public long Id { get; set; }
        public string Title { get; set; }
                
        [ForeignKey("fed")]
        public FederalOkr Fed { get; set; }        
    }
Вот связанная модель
C#
1
2
3
4
5
6
7
 public class FederalOkr
    {
        [Key]
        public long Id { get; set; }
        public string Title { get; set; } 
        public ICollection<GeoSubject> GeoSubject { get; set; }
    }
Заполняю список.
Контроллер :
C#
1
2
3
4
5
6
7
8
9
10
11
12
public IActionResult Create()
        {            
           var selectList = new List<SelectListItem>();            
            selectList.AddRange(db.fed.Select(keyValuePair => new SelectListItem()
            {
                Value = keyValuePair.Id.ToString(),
                Text = keyValuePair.Title
            }));
 
            ViewBag.Types = selectList;
            return 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
<div class="row">
    <div class="col-md-4">
        <form asp-action="Create">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Title" class="control-label"></label>
                <input asp-for="Title" class="form-control" />
                <span asp-validation-for="Title" class="text-danger"></span>
            </div>            
            @Html.DropDownListFor(m => m.Fed,
                (ViewBag.Types as List<SelectListItem>),
                new Dictionary<string, object>()
                {
                { "class", "form-control form-input"},
                { "Id", "CoType"},
                { "Title", "CoType"}
                })      
            <div class="form-group">
                <input type="submit" value="Добавить" class="btn btn-default" />
            </div>
        </form>
    </div>
</div>
Так пытаюсь записать значение в БД:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[HttpPost]        
        public ActionResult Create(GeoSubject subj)
        {
            try
            {                                     
                db.o_geosubjects.Add(subj);
                db.SaveChanges();
 
                return View("Index");
            }
            catch
            {
                return View();
            }
        }
P.S. Ветку ASP .NET Core для начинающий не нашёл.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2019, 12:54
Ответы с готовыми решениями:

CodeIgniter: Не передаются переменные из контроллера в представление
Здраствуйте, уважаемые форумчане. У меня не получается кое-что в CodeIgniter, вот собственно в чем...

Не передаются данные с контроллера в Vue
Здравствуйте! Ничего не понимаю! Уже сижу второй день и никак не могу понять, почему не...

Не передаются данные из запроса в представление
Здравствуйте! есть запрос к БД, просто в базе он выдаёт верный результат, но когда передаю в него...

В Debug режиме в VS-2012 данные передаются нормально, но при запуске без дебага возникают ошибки и данные не передаются
Всем доброе время суток. Есть проект, работающий на ASP.NET MVC с использованием Entity Framework....

4
2734 / 2041 / 379
Регистрация: 22.07.2011
Сообщений: 7,731
22.11.2019, 13:08 2
Цитата Сообщение от papich Посмотреть сообщение
@Html.DropDownListFor(m => m.Fed
сюда первым аргументом комплексное свойство передается , а вторым аргументом передается коллекция возможных для него значений.
keyValuePair.Id никак не отразить на тип FederalOkr
1
0 / 0 / 0
Регистрация: 02.02.2018
Сообщений: 32
22.11.2019, 14:28  [ТС] 3
sau, Спасибо, что откликнулись! Я ещё нашёл ваши объяснения по аналогичному вопросу в 17ом году (DropDownListFor установить значение Selected) почитал их, попробовал. Но ошибки или такие же или ругается, что передаётся null.

Правильно ли я вас понимаю, что во ViewBag я передаю данные правильно, а из представления получаю не правильно?

Попробовал такой вариант, но ошибка та же
C#
1
@Html.DropDownListFor(m => m.Fed, ViewBag.Types as SelectList)
Муки мои с проблемой этой не первый день... читал/смотрел/пробовал, но прогресса пока нет
0
2734 / 2041 / 379
Регистрация: 22.07.2011
Сообщений: 7,731
22.11.2019, 14:52 4
papich,
https://docs.microsoft.com/ru-... etcore-2.2
пользуясь данным материалом , посмотрите какая разметка у Вас в итоге выходит , как значения на клиенте могут быть привязаны к вашей модели на сервере.

Цитата Сообщение от papich Посмотреть сообщение
Попробовал такой вариант, но ошибка та же
это говорит о том , что Вы не поняли мой комментарий выше.
0
0 / 0 / 0
Регистрация: 02.02.2018
Сообщений: 32
26.11.2019, 00:25  [ТС] 5
sau,
Цитата Сообщение от sau Посмотреть сообщение
https://docs.microsoft.com/ru-ru/ASP...aspnetcore-2.2
пользуясь данным материалом , посмотрите какая разметка у Вас в итоге выходит , как значения на клиенте могут быть привязаны к вашей модели на сервере.
Я прочитал материал по ссылке, прочитал аналогичный материал на метаните, других сайтах и совсем запутался

Общее свойство у меня есть.
C#
1
2
3
[ForeignKey("fedreg")]
        [BindProperty]
        public FederalOkr Fed { get; set; }
Коллекцию, по вашему посту выше, я добавил.
C#
1
2
[NotMapped]
        public ICollection<FederalOkr> Feds { get; set; }
Значения для выпадающего списка перенёс в модель :
C#
1
public IEnumerable<SelectListItem> FedSelect { get; set; }
Выпадающий список переносил в модель, но дальше что-то не продвигаюсь...

Цитата Сообщение от sau Посмотреть сообщение
сюда первым аргументом комплексное свойство передается , а вторым аргументом передается коллекция возможных для него значений.
keyValuePair.Id никак не отразить на тип FederalOkr
Комплексное свойство я вроде передаю. m.Fed , коллекция значений это значения Value типа SelectList?

Не очень ясен момент, как из представления получить Selected item... Явно этот момент не описан.

Вы не подкинете ещё идею, с чего начать? (с поправкой на мой не большой опыт)

Если я получаю список всех областей в представлении, значит модель описана правильно?
Если выпадающий список в представлении заполнен значениями значит ли это, что в представление передано всё, что нужно?

Если в контроллер возвращается из двух полей представления одно заполненное, а второе null - это значит модель не привязана?

Спасибо!
0
26.11.2019, 00:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2019, 00:25
Помогаю со студенческими работами здесь

Почему данные не передаются в таймер?
Хотел сделать таймер, но почему-то мне кажется, что timer1_Tick не передает инфу в мой таймер......

Почему-то не передаются данные через Ajax
Есть следующий код JS, который ловит нажатие на кнопку и отправляет данные data-id в обработчик: ...

Почему не передаются данные из динамической библиотеки?
Когда я возвращаю указатель из функции, программа получает его вместе с данными. Динамическая...

Не передаются данные метода гет в url. Почему?
Отправляю данные в через xmlHttpRequest. В параметрах функции open() пишу...


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

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

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