我有一个页面,我想在后面保留对象之间的对象值。 我正在考虑两种方法来维护对象的价值
- 将值存储在View Sate
中- 将值存储在隐藏字段中
醇>
这是基于性能的最佳选择
答案 0 :(得分:10)
如果 不 需要在客户端脚本中引用它,请查看状态。如果你这样做是一个隐藏的字段。
另外考虑如果数据是敏感的,默认情况下Viewstate是加密的,而默认情况下,隐藏字段将其存储为知道如何查看源的任何人都可以看到的纯文本。
修改强>
Per @Andrew Hare关于他自己答案的说明,我正在编辑这个。值得注意的是,这是一个非常重要的区别。根据我的疏忽,我讨厌有人认为他们使用Viewstate是“安全的”。
默认情况下,Viewstate未加密,它存储为Base-64编码。它可以很容易地解码,因此使用Viewstate是因为它默认是加密的无效。它比普通文本更好,但对任何能够谷歌“解密Viewstate”或“解码Viewstate”的人都没有。
所以不要依赖Viewstate来保护客户端代码中的隐藏信息。
文章here讲述了如何正确加密它。 (但也警告性能问题)。
答案 1 :(得分:2)
由于ViewState本身存储在隐藏的输入中,因此并不重要。使用哪个更容易。如果由我决定,我会选择ViewState,因为ASP.NET运行时将为您处理对象的序列化和反序列化。
答案 2 :(得分:0)
我喜欢ViewState - 它更难被黑客攻击 - 一个讨厌的人可以轻易地将您的页面提交给隐藏字段中的错误数据
答案 3 :(得分:0)
您想将其存储在视图状态中。隐藏字段可以在浏览器上更新,因为它们用于存储可以在客户端操作的信息。视图状态将由asp.net验证以防止篡改,您必须自己使用隐藏字段。