C#MVC将数据从一种操作方法传递到另一种操作方法

时间:2017-11-08 10:52:48

标签: c# asp.net-mvc

我试图在同一个Controller中将数据从一个Action传递到另一个。但是它总是以null为单位

措施1

ViewData["page"] = pageData;

措施2

var pageData = ViewData["page"];//Always Null

我有以下要求。

  1. 点击页面并致电 Action1
  2. 对于ViewData
  3. 中的同一浏览器会话商店 pageData
  4. 页面上会有一个按钮,它会调用 Action2
  5. 使用 ViewData [“page”] 获取我们分配的pageData值 的措施1
  6. 有人可以帮助我实现这个目标吗?

    由于

4 个答案:

答案 0 :(得分:2)

尝试TempData

TempData["page"] = pageData;
  

ViewBag和ViewData用于将数据从控制器传递到视图。

     

TempData用于将数据从当前请求传递到下一个请求   请求。

有关差异的其他信息,请参阅此链接Difference Between ViewData, ViewBag and TempData

答案 1 :(得分:0)

ViewBag或ViewData仅从一个控制器操作生效到视图。

要在下一个立即操作中访问该值,请尝试使用与ViewData

类似语法的TempData

答案 2 :(得分:0)

您要做的是填写ViewData["page"]在您的操作中,然后将其传递给View。因为它只存在于你的Controller [Action] -> View内。然后将其存储在一个元素(它可以是一个隐藏的输入)中,如:

<input type="hidden" name="ID" value=@ViewData["page"] id="ID" />

然后如果您希望在Next ActionResult中收到它,您可以轻松拨打下面的FormCollection并从隐藏输入中获取值:

public ActionResult Example(FormCollection form)
{
    var id = form["ID"];
}

这与ViewData和ViewBag的工作原理有关。的然而;如果您想直接在其他操作中使用数据,我建议您使用TempData,如下所示:

TempData["page"] = pageData;

还有很多其他方法可以在您的其他操作中接收数据,例如CookiesSessions,但除非您不想遇到很多问题,我建议{{1} }。

<强>更新

使用TempData,下一个最简单的选项是Session它的工作原理如下:

创建:

Session

读:

Session["page"] = YourValue;

答案 3 :(得分:0)

试试这个

TempData["page"] = pageData;

它适用于多个操作但只有一个请求。

Session["page"] = pageData;

适用于多个请求,但更重要。

我希望这对你有所帮助。