C# 使用ViewState或hiddenfield哪个最好

C# 使用ViewState或hiddenfield哪个最好,c#,asp.net,viewstate,hiddenfield,C#,Asp.net,Viewstate,Hiddenfield,我有一个页面,我想在其中维护post back之间object的值。 我想有两种方法来保持物品的价值 将值存储在视图状态中 将值存储在隐藏字段中 哪一个是基于性能的最佳选择我喜欢ViewState-它更难破解-一个讨厌的人很容易将你的页面提交给你,而你隐藏的字段中有坏数据你想将其存储在视图状态。隐藏字段可以在浏览器上更新,因为它们用于存储可在客户端操作的信息。asp.net将对视图状态进行验证,以防篡改,您必须自己对隐藏字段进行验证。这并不重要,因为视图状态本身存储在隐藏的输入中。选择对你来说更

我有一个页面,我想在其中维护post back之间object的值。 我想有两种方法来保持物品的价值

  • 将值存储在视图状态中
  • 将值存储在隐藏字段中

  • 哪一个是基于性能的最佳选择

    我喜欢ViewState-它更难破解-一个讨厌的人很容易将你的页面提交给你,而你隐藏的字段中有坏数据

    你想将其存储在视图状态。隐藏字段可以在浏览器上更新,因为它们用于存储可在客户端操作的信息。asp.net将对视图状态进行验证,以防篡改,您必须自己对隐藏字段进行验证。

    这并不重要,因为视图状态本身存储在隐藏的输入中。选择对你来说更容易的。如果由我决定,我会选择ViewState,因为ASP.NET运行时将为您处理对象的序列化和反序列化。

    ViewState如果您不需要在客户端脚本中引用它。一个隐藏的字段

    还考虑如果数据是敏感的,则默认情况下对View状态进行加密,而默认字段将其存储为纯文本,对于知道如何查看源的任何人可见。

    编辑

    根据@Andrew Hare在自己答案上的注释,我正在编辑此内容。这是一个值得注意的重要区别。基于我的疏忽,我不希望有人认为他们使用Viewstate是“安全的”

    默认情况下,Viewstate不加密,它存储为Base-64编码。它可以相当容易地被解码,因此使用Viewstate是无效的,因为默认情况下它是加密的。它比纯文本要好,但对任何有能力在谷歌上“解密Viewstate”或“解码Viewstate”的人来说都不行

    因此,不要依赖Viewstate来保护客户端代码中的隐藏信息


    一篇文章讲述了如何正确加密它。(但也警告性能问题)

    我不确定我是否同意。。。Viewstate是加密的,默认情况下,隐藏字段不是加密的,除非我遗漏了什么。我通常相信你的答案,所以我打赌我遗漏了一些东西。不,你做了一个很好的点-视图状态可以加密(但它并不总是加密的-默认情况下它是简单的base-64编码)。接得好!:)非常感谢。当然,关于base-64你是对的。这是一个重要的区别。我正在编辑我的答案以反映这一点。