为什么使用隐藏字段?

时间:2010-05-21 11:35:20

标签: asp.net hidden-fields

我一直看到Web应用程序中使用了很多隐藏字段。我使用过编写的代码,使用大量隐藏字段和来自可见字段的数据值来回发送。虽然我不明白为什么使用隐藏的字段。我几乎总能想到在不使用隐藏字段的情况下解决同一问题的方法。隐藏字段如何帮助设计?

任何人都可以告诉我隐藏字段提供的优势究竟是什么?为什么使用隐藏字段?

8 个答案:

答案 0 :(得分:18)

隐藏字段是最简单的方法,这就是为什么它们被使用了很多。

备选方案:

  • 在会话服务器端存储数据(使用sessionid cookie)
  • 将数据存储在事务服务器端(事务ID为单个隐藏字段)
  • 使用网址路径而非适用的隐藏字段查询参数

主要关注点:

  • 无法信任隐藏字段的值,以防止页面之间没有被篡改(与服务器端存储相对)
  • 每次都需要发布大数据,可能是个问题,某些数据无法发布(例如上传的图片)

主要优势:

  • 没有在页面和多个浏览器窗口之间溢出的粘性会话
  • 无需服务器端清理(对于过期数据)
  • 可访问客户端脚本

答案 1 :(得分:12)

假设您要编辑对象。现在将ID放入隐藏字段会很有帮助。当然,您必须永远不要依赖该值(即确保用户对insert / update拥有适当的权利。)

不过,这是一个非常方便的解决方案。可以在可见字段(例如只读文本框)中显示ID,但会对用户造成不良影响。

将ID存储在会话/ cookie中是令人望而却步的,因为它不允许同时打开多个编辑窗口并施加生命周期限制(会话超时会导致编辑操作中断,非常烦人)。

可以使用URL,但会破坏设计规则,即在修改数据时使用POST。此外,由于用户可以看到它,因此会创建更加丑陋的URL。

答案 2 :(得分:4)

我看到/使用的最常见的用途是ID和其他真正不需要出现在页面上的东西,除了在某些时候发送回服务器所需的其他原因。

-edit,应该包含更多细节 -

比如说你有一些你想要更新的对象 - 用户界面发回一组值,而那时服务器可能知道也可能不知道“嘿这是一个客户对象”,所以你要发出请求服务器并说“嘿,给我ID 7”,现在你有了你的客户对象,因为系统知道它。更新将被应用,验证,无论如何,现在您的UI将获得完成的结果。

我猜一个好的借口/论点是使用linq。尝试更新linq中的对象而不首先从数据库中获取它。它没有真正的想法,它可以跟踪,直到你得到完整的对象。

答案 3 :(得分:4)

这是一个原因,一种在客户端代码(javascript)和服务器端之间传递数据的便捷方式。

答案 4 :(得分:3)

有许多有用的场景。

一种是在页面上“存储”一些不应由用户输入的数据。例如,在生成页面时存储用户ID,然后将该值自动提交,并将表单返回给服务器。

另一种情况是安全性。向页面添加一些隐藏的标记,并检查它是否存在于服务器上。这将有助于确定表单是通过浏览器还是通过刚刚发布到您网站上某个网址的某个机器人提交的。

答案 5 :(得分:3)

它会阻止URL(如查询字符串中),因此它保持干净。它还可以阻止会话,而不一定需要在会话中。

除此之外,我想不出太多其他好处。

答案 6 :(得分:1)

它们通常用于在交互过程中存储状态。可以使用Cookie代替,但有些人会禁用它们。也可以使用单个隐藏字段指向服务器端状态,但是会出现会话粘性问题。

答案 7 :(得分:1)

如果您在表单中使用隐藏字段,则通过添加新控件来增加表单的负担。

如果不需要隐藏字段,则不应该使用隐藏字段,因为它不适合安全点。使用隐藏字段不受良好编程的影响。因为它也会影响应用程序的性能。