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



我试图在同一个控制器中将数据从一个动作传递到另一个动作。但它总是以空值出现

操作1

ViewData["page"] = pageData;

行动2

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

我有以下要求。

  1. 点击页面并调用操作 1
  2. 对于同一浏览器会话存储页面查看数据中的数据
  3. 页面上将有一个按钮将调用 Action2
  4. 使用 ViewData["page"] 获取我们在其中分配的 pageData 值操作1

谁能帮我实现这一目标?

谢谢

尝试TempData

TempData["page"] = pageData;

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

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

有关差异的其他信息,您可以参考此链接ViewData,ViewBag和TempData之间的差异。

ViewBag 或 ViewData 仅从一个控制器操作存在到 View。

若要在下一个即时操作中访问该值,请尝试使用语法与 ViewData 类似的 TempData

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

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

然后,如果您希望在下一个操作结果中收到它,则可以轻松地调用如下所示的FormCollection并从隐藏输入中获取值:

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

这就是它与ViewData和ViewBag一起工作的方式。然而;如果您想在另一个操作中直接使用数据,我建议使用如下所示TempData

TempData["page"] = pageData;

在您的其他操作中还有许多其他方法可以接收数据,例如CookiesSessions但除非您不想遇到很多麻烦,否则我建议您TempData

更新

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

创造:

Session["page"] = YourValue;

读:

//You can easy cast it to your type or Convert it.
var _strValue = Sessions["page"].ToString() //if its string 

试试这个

TempData["page"] = pageData;

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

Session["page"] = pageData;

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

我希望这对你有所帮助。

相关内容

最新更新