如何在ASP.NET MVC Web应用程序中传递上下文

问题描述:

好吧,我是ASP.NET Web应用程序的新手...以及一般的Web应用程序。我只是在为工作中的内部工具开发一些应用程序。如何在ASP.NET MVC Web应用程序中传递上下文

给予本教程

...

http://www.asp.net/learn/mvc-videos/video-395.aspx

的例子主要有一个全球性的任务列表。

所以,如果我想做同样的事情,但现在我想维护项目的任务。所以我现在选择一个项目,并获得该项目的任务列表。我如何保持我在与任务交互时选择的项目的上下文?我是否以某种方式将它编码到链接中?或者你把它保存在某种会话数据中?或者其他方式?

确定,从我所知道的,最好的选择似乎是将其保存到会话数据

REST风格的URL,隐藏字段和会话Cookie是你的朋友。

我用:为国家应持续多个请求,例如

  • 会话状态当使用向导时。尽管可能会导致可伸缩性问题,但我会注意不要在此放置太多数据。
  • TempData适用于您只希望状态可用于下一个请求的场景(例如,当您重定向到另一个操作并且您希望该操作可以访问该状态但您不希望它在其他环境中移动时之后)
  • 隐藏的表单域[input type =“hidden”]表示与表单数据相关的状态,我希望控制器知道该状态,但我不希望显示该数据。也可以用来将状态推送到客户端,以免超负荷服务器资源。

因为听起来您有多个项目,每个项目都有多个任务,所以最好让项目在URL中设置。这需要路线如"/projects/{project}/tasks"。它遵循RESTful URL原则(即URL描述内容)。

如果用户可能在多个浏览器窗口中打开不同的项目,则使用会话状态将不起作用。假设我正在登录到您的系统,并选择了两个在两个选项卡中打开的项目。首先将会话设置为第一个打开的选项卡的项目,但第二个选项卡一加载,会话就会被覆盖到该项目。如果我在第一个标签中做了任何事情,它将被记录在第二个项目中。