在MVC中使用会话状态的解决方法

时间:2014-07-30 10:21:55

标签: asp.net asp.net-mvc asp.net-mvc-4 session architecture

我正在研究ASP.NET MVC 4项目。我有以下方案来实现:

Page A | <-> Page B | <-> Page C
                    | <-> Page D
  • Page A调用Page B

  • 页面B调用页面C,一旦页面C完成它的工作,它将返回到页面B

  • 页面B也可以调用Page D,一旦页面D完成它的工作,它就会返回到页面B

  • 一旦页面B完成任务,控件将返回到页面A.

这些页面通常是&#34;创建&#34; MVC中的页面创建一个新模型并将其保存到数据库中。保存后,要返回的默认操作是该模型的列表视图。但是我正在劫持这个流程并打电话给&#34;创建&#34;来自其他页面的页面,并使用session存储UrlReferrer并将其重定向回发出请求的原始页面,而不是回退到该模型的默认列表视图页面。

即使我没有在另一个页面中使用一个页面的会话变量,并且我在流程完成后处理会话变量,我仍然通过临时存储{{1}来创建MVC页面stateful } 细节。

是否有解决方法可以在不使用会话状态的情况下实现此行为?

编辑:代码

redirection

3 个答案:

答案 0 :(得分:0)

你可以创建一个临时数据库表并使用它,但你仍然需要从会话回到表的一些id。独特的钥匙。您可以将它存储在用户本地PC上的cookie中,然后将其传入并在mvc中读取它?

答案 1 :(得分:0)

您可以将RequestedUrl隐藏在表单中,以便客户端在提交时将其发送给您,而不是将其保留在服务器上。或者甚至更好,而不是保留整个URL,而不是保留几个隐藏的参数,您可以在提交表单后重新构建URL。

答案 2 :(得分:0)

会议在这里看起来相当沉重,特别是因为客户从来没有看到任何改变他们的观点。他们只是加载页面A,即使你在幕后调用B,C和D来重用代码。由于所有这些都发生在一个http请求中,因此您应该考虑使用Context.Items代替:

http://www.csse.monash.edu.au/courseware/cse2030/2004/state.html

此外,默认的ASP.NET会话状态将阻止每个会话ID。当您同时点击两个页面时,使用相同的会话ID,一个将在另一个页面开始之前运行完成。完全避免它将允许您的CRUD操作并行发生,这可能是好事还是坏事,这取决于后端代码的其余部分处理同时CRUD操作的程度。