如何在ASP.NET MVC Web应用程序中传递上下文
时间:2020-03-06 14:34:55 来源:igfitidea点击:
好的,我是ASP.NET Web应用程序的入门者……以及一般的Web应用程序。我只是为工作中的内部工具做一个Play应用程序。
鉴于本教程...
http://www.asp.net/learn/mvc-videos/video-395.aspx
该示例基本上具有全局任务列表。
因此,如果我想做同样的事情,但是现在我想维护项目的任务。因此,我现在选择一个项目,然后获得该项目的任务列表。与任务交互时,如何保持所选项目的上下文?是否以某种方式将其编码到链接中?还是将其保存在某种会话数据中?或者其他方式?
解决方案
好的,据我所知,最好的选择似乎是将其保存到Session数据中
RESTful URL,隐藏字段和会话cookie是朋友。
我用:
- 会话状态,用于应持续多个请求的状态,例如使用向导时。我会注意不要在此处放置太多数据,因为这可能会导致可伸缩性问题。
- TempData适用于仅希望状态可用于下一个请求的情况(例如,当我们重定向到另一个操作,并且我们希望该操作可以访问该状态,但又不想在此之后挂断状态)
- 隐藏的表单字段[input type =" hidden"],用于与表单数据有关的状态,我希望控制器知道该状态,但是我不希望显示该数据。也可以用于将状态推送到客户端,以免增加服务器资源。
听起来我们有多个项目,每个项目都有许多任务,最好的做法是在URL中设置项目。这将需要诸如" / projects / {project} / tasks"
之类的路由。它遵循RESTful URL原则(即URL描述内容)。
如果用户可能在多个浏览器窗口中打开了不同的项目,则无法使用会话状态。假设我要登录到系统,然后在两个选项卡中打开两个选择的项目。首先,将会话设置为第一个打开的选项卡的项目,但是一旦加载了第二个选项卡,该会话将被覆盖到该项目。如果我随后在第一个选项卡中执行任何操作,它将被记录到第二个项目中。