17

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

谁能告诉我隐藏字段提供的优势到底是什么?为什么要使用隐藏字段?

4

8 回答 8

18

隐藏字段只是最简单的方法,这就是它们被大量使用的原因。

备择方案:

  • 将数据存储在会话服务器端(使用 sessionid cookie)
  • 将数据存储在事务服务器端(事务 id 作为单个隐藏字段)
  • 在适用的情况下使用 URL 路径而不是隐藏字段查询参数

主要担忧:

  • 不能相信隐藏字段的值不会被逐页篡改(与服务器端存储相反)
  • 大数据每次都需要发布,可能是个问题,有些数据(比如上传的图片)是不可能的

主要优点:

  • 没有在页面和多个浏览器窗口之间溢出的粘性会话
  • 无需服务器端清理(针对过期数据)
  • 可访问客户端脚本
于 2010-05-21T11:40:14.067 回答
12

假设您要编辑一个对象。现在将 ID 放入隐藏字段会很有帮助。当然,您绝不能依赖该值(即确保用户对insert/具有适当的权限update)。

不过,这是一个非常方便的解决方案。在可见字段(例如只读文本框)中显示 ID 是可能的,但会激怒用户。

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

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

于 2010-05-21T11:39:35.673 回答
4

我看到/使用的最典型用途是用于 ID 和其他出于任何其他原因实际上不需要出现在页面上的东西,而不是在某些时候需要将其发送回服务器。

-编辑,应该包含更多细节-

举例来说,您有一些要更新的对象——UI 发送回一组值,此时服务器可能知道也可能不知道“嘿,这是一个客户对象”,因此您向服务器发出请求,然后说“嘿,给我 ID 7”,现在你有了系统知道的客户对象。更新被应用、验证,现在你的 UI 得到了完整的结果。

我想一个很好的借口/论据是使用 linq。尝试更新 linq 中的对象,而不先从数据库中获取它。在您获得完整对象之前,它并不真正知道它是可以跟踪的东西。

于 2010-05-21T11:38:13.823 回答
4

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

于 2010-05-21T11:41:46.857 回答
3

有很多有用的场景。

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

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

于 2010-05-21T11:39:07.940 回答
3

它将内容排除在 URL 之外(如在查询字符串中),因此它保持干净。它还可以将可能不一定需要在其中的东西排除在会话之外。

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

于 2010-05-21T11:40:16.937 回答
1

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

于 2010-05-21T11:38:52.137 回答
1

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

如果没有必要采取隐藏场,你不应该采取它,因为它不适合在安全点的基础上。使用隐藏字段不属于良好的编程。因为它也会影响应用程序的性能。

于 2012-12-07T12:19:19.517 回答