Так же, как говорится об ошибке, ViewBag
не имеет таких данных. Обратите внимание, как вы устанавливаете это значение в вашем [HttpGet]
действии:
ViewBag.DepartmentId = dList;
Таким образом, когда вы возвращаете представление, это значение становится доступным для представления. Ваше действие [HttpPost]
возвращает тот же вид. Но он возвращает его без какой-либо модели и, в частности, в отношении этой ошибки, не устанавливая ничего в ViewBag
.
Перед возвратом вида установите значения ViewBag
, необходимые для действия вашего контроллера. Точно так же, как вы уже делаете в своем [HttpGet]
действии.
(Поскольку функциональность будет повторяться, вам, конечно, рекомендуется извлекать ее в общий метод, а не просто копировать / вставлять весь один и тот же код. Вам также рекомендуется использовать модель вместо того, чтобы полагаться на ViewBag
, но это может сводиться к вопросу личных предпочтений.)
<ч />
Редактировать: Как указано в комментарии ниже, пример:
Например, обратите внимание, как вы устанавливаете значение ViewBag
в своем действии [HttpGet]
:
using (MyConnectionString _context = new MyConnectionString())
{
var list = (from d in _context.Departments
select new
{
d.DepartmentId,
d.DepartmentName
}).ToList();
SelectList dList = new SelectList(list, "DepartmentId", "DepartmentName");
ViewBag.DepartmentId = dList;
}
Если вы хотите установить точно такое же значение в вашем действии [HttpPost]
, просто выполните точно такую же вещь :
if (ModelState.IsValid)
{
// ... the code you have in here is unchanged
}
using (MyConnectionString _context = new MyConnectionString())
{
var list = (from d in _context.Departments
select new
{
d.DepartmentId,
d.DepartmentName
}).ToList();
SelectList dList = new SelectList(list, "DepartmentId", "DepartmentName");
ViewBag.DepartmentId = dList;
}
return View();