Использование ViewData для передачи строки из контроллера для просмотра в ASP.NET MVC3 - PullRequest
7 голосов
/ 10 января 2012

Я пытаюсь передать случайное 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 ]

11 голосов
/ 10 января 2012

Вы не визуализируете представление, вы перенаправляете.Если вы хотите передать некоторую информацию в представление, вам необходимо вернуть это представление после добавления его в 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");
}

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

1 голос
/ 10 января 2012

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

...