Использование 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) при отладке контроллер показывает значение:

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

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

почему значение не передается в представление правильно. Оба моих контроллера для 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 автоматически при следующем запросе.