繁体   English   中英

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

[英]Passing data between Views and Controller

想看看是否有人可以提供一些有关如何解决我当前面临的问题的建议/指针。 场景就像…

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

  4. 用户完成页面B的工作后,我需要在页面B上保存更改,然后重定向回页面A。

  5. 在这里,页面A应基于步骤3中的保存器表单数据发出“发布”请求。目的是显示在重定向到页面B之前在其中搜索的数据。

就像是..

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请求,以显示ViewA。

提前致谢

如果您要依靠整页刷新,则需要使用Session。 您没有给出不想使用它的原因,但是Cache对象完全不适合此目的,因为如果服务器需要重新获得一些内存,并且可以在用户之间共享它,则可以将其清除。 。 会话是专门为您描述的目的而构建的-在整页刷新之间保留数据。

另外,我会考虑将您的网站构建为单页应用程序,也就是说,您不会在导航之间进行全页刷新,而是可以将数据存储在客户端上的javascript对象中。 由于您非常强调数据非常重要,因此会话可能会更安全,尽管如果用户不小心离开页面,由于您的JavaScript对象将被清除,基于服务器的会话对象将保留在该页面上在会话生命周期的持续时间内。

您也可以将数据存储在Cookie /本地存储对象(html5)中,但这可能对您正在执行的操作有些过分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM