Использование ViewData для передачи строки из контроллера для просмотра в ASP.NET MVC3

Я пытаюсь передать случайный string от меня Controller до View.

вот мой Controller код:

 [HttpPost]
    public ActionResult DisplayForm(UserView user)
    {
       //some  data processing over here
        ViewData["choice"] = "Apple";

        return RedirectToAction("Next", "Account");
    }

теперь я хочу передать это значение данных "Apple" в мой вид Next.cshtml который создается следующим образом:

//View: Next.cshtml

  @{
    ViewBag.Title = "Thanks for registering";
    Layout = "~/Content/orangeflower/_layout.cshtml";
   }
    <p>Your favorite fruit is:</p>@ViewData["choice"]

но я не могу видеть свои данные в браузере при запуске проекта.

вот снимок:

1) при отладке контроллер показывает значение:

enter image description here

2) в представлении браузера не отображается значение "Apple"

enter image description here

3) на дальнейшую отладку к моему Next.cshtml посмотреть: enter image description here

почему значение не передается в представление правильно. Оба моих контроллера для Next и DisplayForm находятся в одном контроллере AccountController.cs, по-прежнему значение не отображается.

кто-нибудь может помочь мне решить эту проблему ?

2 ответов


вы не визуализируете представление, вы перенаправляете. Если вы хотите передать некоторую информацию о представлении, вам нужно вернуть это представление после добавления его в ViewData:

[HttpPost]
public ActionResult DisplayForm(UserView user)
{
    //some  data processing over here
    ViewData["choice"] = "Apple";

    return View();
}

если вы хотите передать сообщение, которое выживет после перенаправления, вы могли бы использовать TempData вместо ViewData.

[HttpPost]
public ActionResult DisplayForm(UserView user)
{
    //some  data processing over here
    TempData["choice"] = "Apple";

    return RedirectToAction("Next", "Account");
}

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


вы выполняете post-redirect-get. The ViewData устанавливается для этого запроса, который возвращает перенаправление, очищая ViewData, затем происходит другой запрос, который не имеет данных. Использовать TempData вместо этого, и он будет добавлен в ViewData автоматически при следующем запросе.