我试图在同一个控制器中将数据从一个动作传递到另一个动作。但它总是以空值出现
操作1
ViewData["page"] = pageData;
行动2
var pageData = ViewData["page"];//Always Null
我有以下要求。
- 点击页面并调用操作 1
- 对于同一浏览器会话存储页面查看数据中的数据
- 页面上将有一个按钮将调用 Action2
- 使用 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;
在您的其他操作中还有许多其他方法可以接收数据,例如Cookies
,Sessions
但除非您不想遇到很多麻烦,否则我建议您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;
适用于多个请求,但更重。
我希望这对你有所帮助。