2012-01-10 4 views
7

Я пытаюсь передать случайный string из моего Controller в View.Использование ViewData для передачи строки из контроллера для просмотра в ASP.NET MVC3

Вот мой Controller код:

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

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

Теперь я хочу передать это значение данных «Яблоко» на мой взгляд 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) Вид браузер не показывает значение "Яблоко"

enter image description here

3) При дальнейшей отладке на мой Next.cshtml Вид: enter image description here

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

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

ответ

11

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

+0

ohh, поэтому мне нужно написать return View («Next», «Account») в соответствии с моим кодом, если я не перенаправляю? –

+0

@ParthDoshi, да, если вы хотите напрямую использовать ViewData. Но если вы хотите сохранить шаблон Redirect-After-Post, вы можете использовать TempData, как показано в моем ответе. –

+0

спасибо, что это сработало !! :) –

1

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

+1

спасибо! это было очень полезно. –

+0

Очень хороший вопрос макет и объяснение. –

+0

Спасибо! Иногда я чувствую, что StackOverflow позволяет нам принимать два ответа, один первичный и другой как вторичный ответ.Хотя, я получил ответ от другого пользователя, я чувствовал, что ваш ответ тоже был достаточно хорош для понимания ошибки в моем коде, поэтому спасибо за быстрый ответ –

Смежные вопросы