使用ViewData将字符串从Controller传递到ASP.NET MVC3中的View

时间:2012-01-10 12:54:08

标签: asp.net-mvc-3 viewdata

我正在尝试将string中的Controller随机View传递给Controller

这是我的 [HttpPost] public ActionResult DisplayForm(UserView user) { //some data processing over here ViewData["choice"] = "Apple"; return RedirectToAction("Next", "Account"); } 代码:

Next.cshtml

现在我想传递那个数据值&#34; Apple&#34;我的观点//View: Next.cshtml @{ ViewBag.Title = "Thanks for registering"; Layout = "~/Content/orangeflower/_layout.cshtml"; } <p>Your favorite fruit is:</p>@ViewData["choice"] 创建如下:

Next.cshtml

但是当项目运行时,我无法在浏览器中看到我的数据。

以下是快照:

1)在调试时,控制器显示值:

enter image description here

2)浏览器视图没有显示值&#34; Apple&#34;

enter image description here

3)进一步调试我的Next视图: enter image description here

为什么值没有正确传递给View。我DisplayFormAccountController.cs的控制器都位于同一个控制器{{1}}内,仍未显示值。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:11)

您正在渲染视图,而是重定向。如果您希望向视图传递一些信息,则需要在将此视图添加到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 :(得分:1)

您正在执行后重定向 - 获取。正在为此请求设置ViewData,该请求返回重定向,清除ViewData,然后发生另一个没有数据的请求。请改用TempData,并在下次请求时自动将其添加到ViewData