Почему мы также должны передавать ViewBag для SelectList в действии HttpPost? - PullRequest
0 голосов
/ 28 мая 2019

У меня есть элементы списка выбора, которые хранятся в 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?как работает этот ключ?

Снимок экрана:

Screenshot

1 Ответ

0 голосов
/ 28 мая 2019

Вы, возможно, думаете об этомРассмотрим это просто ...

Оба действия возвращают одно и то же представление:

public ActionResult New()
{
    //...
    return View();
}

И это представление использует значение из ViewBag:

(IEnumerable<SelectListItem>)ViewBag.Categories

InДля того чтобы представление использовало это значение, оно должно быть в ViewBag.Таким образом, любое действие, которое возвращает это представление, должно будет заполнить это значение.Вот почему возникает ошибка, когда вы не заполняете это значение.Ошибка говорит вам, что вы пытаетесь использовать значение ViewBag, которое не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...