在ASP.NET MVC中在回发之间保留复杂数据

Rob*_*ner 5 asp.net-mvc asp.net-mvc-2

我正在开发一个ASP.NET MVC 2应用程序,它连接到一些服务来进行数据检索和更新.这些服务要求我在更新数据时提供原始实体以及更新的实体.这样做可以改变跟踪和乐观并发.服务无法更改.

我的问题是我需要以某种方式在回发之间存储原始实体.在WebForms中,我会使用ViewState,但从我读过的内容来看,这就是MVC.原始值不必是防篡改证明,因为服务将它们视为不可信.实体将是(最大)1k,它是一个内联网应用程序.

我提出的选择是:

  1. 会话 - 排除 - 将实体存储在会话中,但我不喜欢这个想法,因为没有计划在之间共享会话
  2. URL - 排除 - 数据太大
  3. HiddenField - 将序列化实体存储在隐藏字段中,可能使用加密/编码
  4. HiddenVersion - 实体上有一个(SQL)版本字段,我可以放入隐藏字段.然后在保存中,我从服务中获取"原始"实体并比较版本,执行我自己的乐观并发.
  5. Cookies - 像3或4,但使用cookie而不是隐藏字段

我倾向于选项4,尽管3会更简单.这些有效的选择还是我走错了路?有没有更好的方法呢?

gri*_*egs 1

如果您确实将其存储在会话中,那么您需要确保在实施网络场时正确加载会话。

我们现在有(完全相同)同样的问题,我们决定做的是实现存储库模式并将其链接到 cookie。

然后,如果这成为一个问题,我们可以简单地插入会话管理器、数据库管理器或其他任何东西,并且由于存储库模式,我们的代码甚至不需要知道。

我们修改了隐藏字段的想法,但感觉太像 ViewState,而且我们都讨厌 WebForms 中的它,所以这个想法被废弃了。但这不仅仅是因为我们讨厌视图状态。当您按 Ctrl F5 时出现问题。内容将被清除,然后你该怎么办?

因此,此时它是一个带有 cookie 的存储库模式,该模式可能会发生变化,但实现本身很容易发生变化。

编辑

我们还决定不使用隐藏字段,因为对其进行更改太容易了,因此您需要从服务器执行一些令牌操作以确保它不会被篡改。

隐藏字段不断增加本来应该是非常简单的问题的复杂性。

至少这是我们对此事的想法。