【问题标题】:C# MVC pass data from one action method to another [duplicate]C#MVC将数据从一个动作方法传递到另一个[重复]
【发布时间】:2018-04-21 00:40:18
【问题描述】:

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

动作1

ViewData["page"] = pageData;

动作2

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

我有以下要求。

  1. 点击页面并调用Action1
  2. 对于同一浏览器会话存储 pageData 在 ViewData
  3. 页面上会有一个按钮调用Action2
  4. 使用 ViewData["page"] 获取我们在其中指定的 pageData 值 动作1

谁能帮我实现这个目标?

谢谢

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    试试TempData

    TempData["page"] = pageData;
    

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

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

    有关差异的更多信息,您可以参考此链接Difference Between ViewData, ViewBag and TempData

    【讨论】:

    • 我也尝试过 TempData["page"] = pageData 但对我不起作用。也保留了 TempData.Keep() 。但没有运气
    • 我试图在我的机器上复制它,它与您发布的场景一样工作正常。您确定下一个请求是 Action 方法 Action2 吗?如果不是,TempData 将自动为空。由于 TempData 仅适用于“并发”请求。
    【解决方案2】:

    试试这个

    TempData["page"] = pageData;
    

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

    Session["page"] = pageData;
    

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

    希望对你有所帮助。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我也试过 TempData["page"] = pageData 但不适合我。也保留了 TempData.Keep() 。但没有运气
      • 这两个之间是否调用了其他操作方法 .. 就像在 ajax 中一样?
      • 不。没有其他操作方法
      • 设置时值是否存在?尝试作为隐藏字段从视图传递到下一个控制器:)
      【解决方案4】:

      您要做的是在您的操作中填写ViewData["page"],然后将其传递给查看。因为它只存在于您的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,但除非您不想遇到很多麻烦,否则我推荐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 但不适合我。也保留了 TempData.Keep() 。但没有运气
      • @ChirayuBrahmbhatt 创建会话并调用会话并接收您的数据,让我更新我的答案。
      • @ChirayuBrahmbhatt 已更新
      猜你喜欢
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      相关资源
      最近更新 更多