У меня есть элементы списка выбора, которые хранятся в ViewBag.Я не понимаю, почему мы должны объявлять этот ViewBag в действиях HttpGet и HttpPost?
Если мы не объявим это снова в действии HttpPost, проверка не будет работать, и мы получим исключение. Но как это происходит технически?
Действия:
public ActionResult New()
{
ViewBag.Categories = new SelectList(db.Categories.ToList(),"Id", "Name");
return View();
}
[HttpPost]
public ActionResult New(Article article)
{
ViewBag.Categories = new SelectList(db.Categories.ToList(), "Id", "Name");
if(ModelState.IsValid)
{
string FullName = HttpContext.GetOwinContext()
.GetUserManager<ApplicationUserManager>()
.FindById(User.Identity.GetUserId()).FullName;
article.AuthorName = FullName;
article.UserId = User.Identity.GetUserId();
db.Aricles.Add(article);
db.SaveChanges();
return RedirectToAction("All");
}
return View();
}
Список:
@Html.DropDownListFor(m => m.CategoryId, (IEnumerable<SelectListItem>)ViewBag.Categories, "Select Category", new { @class = "form-control" })
Возбужденное исключение при удалении ViewBag из действия HttpPost. Интересно, почему этот ключ
= CategoryId?как работает этот ключ?
Снимок экрана: