为什么要使用隐藏字段?

17

我经常在网页应用程序中看到很多隐藏字段。我曾经使用大量隐藏字段和从可见字段发送和接收数据值的代码。尽管我不明白为什么使用隐藏字段,但我几乎总能想出解决相同问题的方法,而无需使用隐藏字段。那么隐藏字段在设计中有何帮助?

有谁能告诉我隐藏字段究竟提供了什么优势?为什么要使用隐藏字段?


实际上,我找不到一个不需要隐藏字段的例子。你能提供一个吗? :) - ZeissS
4
为什么这个标签是 c#?你的意思是特别询问在 ASP.NET 中使用隐藏字段吗? - Jørn Schou-Rode
是的,我想问一下在ASP.NET中使用隐藏字段的方法。我已经相应地标记了这个问题。谢谢@Jørn Schou-Rode。 - pavanred
8个回答

18

隐藏字段是最简单的方法,这就是为什么它们被广泛使用的原因。

替代方案:

  • 在服务器端使用 session 存储数据(带有 sessionid cookie)
  • 在服务器端使用事务存储数据(将事务 ID 用作唯一的隐藏字段)
  • 在适用的情况下,使用 URL 路径而不是隐藏字段查询参数

主要关注点:

  • 与服务器端存储相比,无法保证隐藏字段的值在页面之间不会被篡改
  • 每次都需要发布大量数据可能会成为问题,并且对于某些数据(例如上传的图像)是不可能的

主要优势:

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

2
缺少一个好的替代方案来存储这些值,ViewState不再适用。 - Tim Schmelter
1
@Tim:ASP.NET的ViewState确实是使用隐藏的输入字段来实现的。 - Jørn Schou-Rode
我忘了。好的,但是它更容易实现 ;) - Tim Schmelter

12
假设您想编辑一个对象。现在将ID放入隐藏字段是有帮助的。当然,您绝不能依赖该值(即确保用户对insert/update具有适当的权限)。
尽管如此,这是一种非常方便的解决方案。在可见字段中显示ID(例如只读文本框)是可能的,但会引起用户的不适。
将ID存储在会话/cookie中是禁止的,因为它不允许同时打开多个编辑窗口,并且强加了生命周期限制(会话超时会导致编辑操作失败,非常烦人)。
使用URL是可能的,但会违反设计规则,即修改数据时使用POST。此外,由于它对用户可见,因此会创建更丑陋的URL。

4
我最常见/使用的用途是为身份证和其他不需要在页面上出现的东西,只有在某些时候需要将其发送回服务器。
-编辑,应该包括更多细节-
例如,假设您有一些要更新的对象--UI返回值集合,此时服务器可能或可能不知道“嘿,这是一个客户对象”,因此您向服务器发送请求并说“嘿,给我ID 7”,现在您拥有了系统所知道的客户对象。应用,验证等更新完成后,您的UI将获得完成的结果。
我想一个好的借口/论点是使用linq。尝试在不首先从DB中获取它的情况下更新linq中的对象。在获取完整对象之前,它没有真正意识到它是可以跟踪的东西。

4

以下是一个原因,方便地在客户端代码(JavaScript)和服务器端之间传递数据。


3

有许多有用的应用场景。

其中一个是在页面上“存储”某些不应由用户输入的数据。例如,在生成页面时存储用户ID,然后此值将随表单自动提交回服务器。

另一个场景是安全性。向页面添加一些隐藏的令牌,并在服务器上检查其存在。这将有助于识别表单是通过浏览器提交还是通过某些机器人仅发布到您站点上的某个URL。


3

它可以将事物从URL(如查询字符串中)中排除,因此可以保持干净。它还可以使Session中不必要的内容保持在外部。

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


1

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


1

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

如果没有必要使用隐藏字段,您不应该使用它,因为从安全角度来看它并不适合。使用隐藏字段不属于良好的编程实践,因为它还会影响应用程序的性能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接