В проекте MVC, в первую очередь в EF DB, я использую свойство ViewBag для отображения списка значений в раскрывающемся списке. Вот мой метод get и метод post для того же .-
[ HttpGet]
public ActionResult Create()
{
using (var context = new AdventureWorksEntities())
{
ViewBag.Colors = new SelectList(context.Products.Select(a =>
a.Color).Distinct().ToList());
}
return View();
[HttpPost]
[ActionName("Create")]
public ActionResult CreatePost()
{
var producttocreate = new Product();
try
{
UpdateModel(producttocreate);
if (ModelState.IsValid)
{
using (var context = new AdventureWorksEntities())
{
context.Products.Add(producttocreate);
context.SaveChanges();
}
return RedirectToAction("Index");
}
return View(producttocreate);
}
catch(Exception e)
{
return View(producttocreate);
}
}
Здесь свойство ViewBag.Colors является рассматриваемым свойством. Когда я получаю исключение для Post, я хочу передать модель и снова вернуть то же представление Create. Однако, хотя у меня есть код для установки ViewBag.Colors при каждом вызове метода Create Get, он не устанавливается, и я получаю сообщение об ошибке, когда Create View выполняет рендеринг -
Элемент ViewData, имеющий ключ 'Color', имеет тип 'System.String', но должен иметь тип 'IEnumerable' .
Я обнаружил в каком-то другом посте, что причиной этого исключения является то, что ViewBag.Colors имеет значение null, но я не понимаю, почему. Почему он не устанавливается, когда View вызывается из метода Post Action? И как это можно решить?