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