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

C# 在视图和控制器之间传递数据,c#,asp.net-mvc,C#,Asp.net Mvc,想看看是否有人能就如何解决我目前面临的问题提供一些建议/指点 . 情景就像 我有一个页面,上面显示执行搜索和显示数据的位置 在A页上有一个ActionLink,它将所选记录的ID传递给B页 在重定向到B页之前,我需要存储/保留A页的表单数据(我不想使用会话或隐藏字段,因为数据非常重要) 一旦用户完成了对B页的操作,我需要保存对B页的更改并重定向回A页 在这里,页面A应该根据步骤3中的保存器表单数据发出Post请求。目的是显示重定向到B页之前存在的反向搜索数据 类似于 View A //

想看看是否有人能就如何解决我目前面临的问题提供一些建议/指点 . 情景就像

  • 我有一个页面,上面显示执行搜索和显示数据的位置
  • 在A页上有一个ActionLink,它将所选记录的ID传递给B页
  • 在重定向到B页之前,我需要存储/保留A页的表单数据(我不想使用会话或隐藏字段,因为数据非常重要)

  • 一旦用户完成了对B页的操作,我需要保存对B页的更改并重定向回A页

  • 在这里,页面A应该根据步骤3中的保存器表单数据发出Post请求。目的是显示重定向到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.
    
    有没有人有更好的方法来实现这一点

    目前我的解决方案是

  • 在ActionLink上发出ajax POST请求,单击并保存 使用控制器在缓存中创建formcollection
  • 使默认ActionLink获取控制器中传递ID和的请求 返回视图B
  • 在视图B上,在提交时执行ajax POST请求以在页面B和 在ajax成功函数中从缓存返回数据
  • 使用在上述ajax中重新运行的数据发出另一个ajax POST请求 成功显示视图A

  • 提前感谢

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

    或者,我会将您的站点构建为一个单页应用程序,也就是说,您不需要在导航之间进行完整的页面刷新,而是可以在客户端的javascript对象中存储数据。由于您非常强调数据是关键的,因此会话可能会更安全,因为如果用户不小心离开页面,您的javascript对象将被清除,其中基于服务器的会话对象将在会话生命周期期间保留它


    您也可以将数据存储在cookie/本地存储对象(html5)中,但这可能会对您所做的工作造成过度伤害。

    如果没有真实的上下文,很难理解您在这里想要实现的目标。但是,从您所说的来看,javascript单页应用程序似乎更适合于此,而不是将呈现留给MVC。感谢您提供有关在视图之间存储数据的有用详细信息。如果您对我使用一次点击多个ajax调用(视图A上的ActinLink,视图B上的Submuit按钮)来实现这一目标的方法有什么想法,我也很想知道。还有更好的方法吗?我建议您不要在页面A上使用Html.ActionLink,而是使用Ajax.ActionLink并将新数据加载到重叠的Html元素中,这样您的数据仍然保留在“页面背景”中。您可以将页面B作为模式弹出窗口打开,完成工作,完成后关闭重叠的模式弹出窗口,显示页面a下方。这样做的好处是拥有最好的“UI”体验,因为它不会刷新整个页面。您的页面B也应该使用Ajax.Form而不是Html.Form来确保它不会进行整页刷新。我不能使用模式弹出窗口,因为页面B有很多数据,并且有自己的模式弹出窗口。目前,我一直无法完成按钮提交过程,但我无法调用视图A的Post方法(Post,因为我需要传递搜索文本框数据并执行搜索)。