在视图和控制器之间传递数据

时间:2012-10-27 16:47:13

标签: c# asp.net-mvc

想知道是否有人可以就如何解决我目前面临的这个问题提供一些建议/指示 。 场景就像......

  1. 我有一个页面说A执行搜索并显示数据。
  2. 在页面A上有一个ActionLink,它将所选记录的ID传递给页面B.
  3. 在重定向到第B页之前,我需要存储/保存页面A的表单数据(我不想使用会话或隐藏字段,因为数据很关键)。

  4. 一旦用户完成了对页面B的处理,我需要在页面B上保存更改并重定向回到页面A.

  5. 此处页面A应根据步骤3中的保存者表单数据发出Post请求。目的是显示在重定向到B页之前返回的搜索数据。
  6. 像...这样的东西。

    View A
        // Search textboxes here
        // Search data list here with ActionLink column
    
    View B
       // more controls here
       // Submit button - saves changes on this page. 
       // after submit button processing need to go back to View A 
       // and display the same Search data List based on Seach textboxes values 
       // those were entered by user before coming to this View B. 
       // Ques: Not sure how to persist data from View A between calls to View B and then View B to View A.
    

    有没有人有更好的方法来实现这个目标?

    目前我的解决方案是......

    1. 在ActionLink上创建一个ajax POST请求,然后单击并保存 使用控制器在缓存中进行formcollection。
    2. 使默认的ActionLink GET请求在控制器中传递ID 返回视图B.
    3. 在视图B上,提交时执行ajax POST请求以保存页面B上的数据 在ajax成功函数中从缓存中返回数据。
    4. 使用上面ajax中重新创建的数据创建另一个ajax POST请求 成功展示视图A.
    5. 提前致谢

1 个答案:

答案 0 :(得分:0)

如果您依赖于整页刷新,那么您需要使用Session。您没有说明为什么不想使用它,但Cache对象完全不适用于此目的,因为如果服务器需要重新获得某些内存,它可以被清除,并且它在用户之间共享。 Session专门为您描述的目的而构建 - 在整页刷新之间保留数据。

或者我会考虑将您的网站构建为单页应用程序,也就是说,您不会在导航之间执行完整页面刷新,并且可以将数据存储在客户端上的javascript对象中。由于您非常强调数据是关键的,因此会话可能会更安全,因为如果用户意外导航离开页面,您的javascript对象将被清除,基于服务器的会话对象将保留在哪里在会话生命周期的持续时间内。

您还可以将数据存储在cookie /本地存储对象(html5)中,但这对您正在做的事情可能有点过分。