问题标签 [tempdata]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - MVC 多页表单丢失会话
我有一个用于收集潜在客户的多页表单。我们称之为活动的同一表单有多个版本。有些活动是 3 页表单,有些是 2 页,有些是 1 页。它们都共享相同的潜在客户模型和活动控制器等。有一个用于控制活动流程的操作,以及一个用于将所有潜在客户信息提交到数据库的单独操作。
我无法在本地重现此内容,并且已进行检查以确保用户无法跳过页面。会话模式是 InProc。
这在存储会话中的值的每个 POST 操作之后运行:
这是控制器中的 Lead 属性:
父存储类:
广告系列 POST 操作:
问题发生在上述操作之间,在执行以下提交操作之前:
我们网站的每位访问者都会获得一个唯一的 GUID visitorID。但是,当这些错误发生时,Campaign POST 和 Submit POST 之间存在不同的 visitorID。因为我们在活动期间通过 TrackLead() 方法跟踪每个表单提交并提交操作,所以我可以看到会话在调用之间丢失,尽管 OnActionExecuted 在每次 POST 后触发并将表单存储在会话中。
因此,当出现错误时,我们会在一个visitorID 下获得一半的表单,而在另一个visitorID 下获得表单的其余部分。幸运的是,我们使用第三方服务,每次表单值更改时都会发送一个 API 调用,并使用它自己的 ID。这些 ID 在表格的前半部分和表格的其余部分之间是一致的,这是我可以从丢失的会话问题中保存线索的唯一方法。
我还应该注意,这在 99% 的情况下都可以正常工作。
编辑: 我已经修改了我的代码以将我的主要对象显式存储在 TempData 中,并使用 TempData.Keep() 方法在后续请求之间保留该对象。我只将此行为部署到我的 3 个站点中的 1 个,但到目前为止一切都很好。
我还尝试在控制器操作中直接将我的主要对象存储在 Session 中,即,
它使用 HTTPSessionStateBase,试图绕过包装类,而不是使用 HTTPSessionState 的 HttpContext.Current.Session。正如预期的那样,此修改对这个问题没有任何影响。
编辑#2: 今天早上检查我的电子邮件,尽管我将我的主要模型保存在 TempData 中,但我注意到两个会话错误。某些事情导致会话清除,很可能是某种应用程序池回收,但我还没有弄清楚。我可能会开始在 SQL Server 中存储会话...
SessionStore.cs 代码按请求:
asp.net - 在 nodejs 中模拟 ASP.NET TempData
如何在 nodejs 中创建像 TempData 这样的对象?我想也许我可以将标志“IsTempData”设置为会话,并在应用程序结束时清除选择了该标志的会话。但是有一个问题:我有很多使用 tempdata 的异步函数,所以应用程序可能会在我使用 tempdata 之前结束。我希望你明白我所说的结束申请是什么意思:
asp.net-mvc - TempData + Windows 身份验证 = 无超时。是否可以?
我的 MVC 应用程序在 Windows 身份验证下运行。
我在我的应用程序的各个地方都使用了 TempData。问题是,他们很清楚会话超时。但是,Windows 登录仍在运行。在用户注销他的 Windows 登录之前,我如何将它们设置为保持不变。我的意思是,不应该有任何超时。是否可以?
asp.net-mvc-3 - MVC PRG 模式与 SessionState 冲突
我有一个 MVC3 网络应用程序。我一直在使用PRG(Post-Redirect-Get)模式。那是在回发期间,如果任何模型验证失败,我将 ViewData 保存在 TempData 中,然后重定向到原始 GET 操作。
在后期行动中 -
稍后在 GET 操作中 -
这几乎是通常的做法。到目前为止,一切都运行良好。现在,我们需要改进会话持久性,即我们需要“更长”的会话。我已经决定使用ASP.Net State Server。
在我将会话迁移到状态服务器后 -
我的一些存储自定义对象的会话开始出现“无法序列化”错误。我已经制作了这样的对象[Serializable]来解决这个问题。但现在我坚持使用上述 PRG 模式!
错误- 程序集“System.Web.Mvc,版本=3.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35”中的类型“System.Web.Mvc.ViewDataDictionary”未标记为可序列化。
奇怪的是,我找不到一个可以分享我的场景的线程。任何人?
asp.net-mvc - asp.net mvc - 临时数据值在视图中不可用
在控制器中,我在控制器中设置TempData
值,如下所示:
当我尝试在视图中使用它们时,我发现它们始终为空。我可以使用调试器并看到它们被设置,然后在视图中看到它们为空。我很迷惑。
控制器动作实际上是一个子动作,视图是通过调用PartialView()
父控制器来呈现的。没有重定向发生。谁能提出问题是什么?
c# - 从基本控制器返回后 TempData null
TempData 在 Base 方法中填充,但在代码返回到派生控制器的方法时立即变为 null。
派生控制器编辑操作(发布):
基本控制器编辑操作:
asp.net-mvc - 为多个步骤保存数据?
我有 3 个步骤,每个步骤都在视图中。在第 1 步我询问开始日期/时间(他们可以选择时区和时间)并将其存储为 UTC,在第 3 步我想根据他们选择的时区显示日期/时间,而不知道他们选择了哪个时区(不要存储它,因为用户会根据计算机时区看到它)。
我想知道做到这一点的最佳方法。我正在考虑存储临时数据,然后重新存储它。尽管这似乎不是最佳实践。
asp.net-mvc - SessionTempDataProvider 和 CookieTempDataProvider 之间的不同行为
所有这一切的简短版本是我正在使用 TempData 来存储反馈消息,并且在切换到使用 CookieTempDataProvider 后,它们在使用 PRG 模式时不会出现,但是如果我恢复到 SessionTempDataProvider 他们会出现。
在我的 MVC4 应用程序中,我有一种模式,即在成功创建/更新后或当某些页面出现问题并且我需要显示失败消息时,将警告消息写入临时数据以显示在屏幕上。例如...
我有一个由我的 _Layout.cshtml 文件调用的部分视图,该文件基本上是一个占位符 DIV 元素(加上一些 js),其中填充了我的反馈消息,这很好用。
现在默认情况下这是可行的,但 TempData 依赖于会话,如果可能,我想禁用它并使用 TempDataProvider 的不同实现来解决没有会话的问题。我必须使用不同的 TempDataProvier,因为如果我禁用会话而不更改 TempData 的实施,我第一次尝试使用它时会得到一个 InvalidOperationException 说明
SessionStateTempDataProvider 类需要启用会话状态。
我已经用我的 Dependency Injector,StructureMap 注册了一个新组件,它看起来像这样。
我应该提一下我对 CookieTempDataProvider的实现来自这里
显然它已被删除。
现在,当我现在尝试使用 TempData 但我的反馈没有出现时,这解决了异常。我想也许我在努力中破坏了一些东西,所以我注释掉了我的 DI 行并将我的会话状态模式改回InProc
,并对其进行了测试。我的反馈按预期显示(重新启动 IISExpress 后)。我取消注释我的注入行,将会话状态更改为Off
,然后我又没有反馈了。
我做了一些进一步的测试,发现如果我在操作中执行以下操作,我不会收到任何消息
但是,如果我忽略 PRG 模式,而是这样做,那么我会看到我的反馈。
所以我的问题是,普遍接受的 CookieTempDataProvider 是否存在缺陷,或者我做错了什么?
asp.net-mvc - TempData 存储在哪里?
TempData 存储在 ASP.NET MVC 框架(更具体地说,是 ASP.NET MVC 2)中的什么位置?它是存储在服务器端还是发送到客户端?
asp.net-mvc - 使用 Redirect() 时将信息传递回视图
我从多个页面调用控制器并使用returnUrl
参数返回正确的调用位置:
使用时如何将附加信息传递回视图Redirect(url)
?在上面的示例中,我希望能够在有值message
时回传。returnUrl