2010-05-21 156 views
16

我一直在网页应用程序中看到很多隐藏字段。我曾使用过的代码使用了大量的隐藏字段以及来自可见字段的数据值。虽然我不明白为什么使用隐藏的字段。我几乎可以总是想办法解决同样的问题,而不使用隐藏的字段。隐藏字段如何帮助设计?为什么使用隐藏字段?

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

+0

其实,我找不到一个不需要隐藏字段的例子。你能提供一个吗? :) – ZeissS 2010-05-21 11:41:17

+4

为什么标记为'c#'?你是不是特意问一下在ASP.NET中使用隐藏字段? – 2010-05-21 11:44:00

+0

是的我打算询问有关在ASP.NET中使用隐藏字段的问题。我相应地标记了这个问题。谢谢@JørnSchou-Rode – pavanred 2010-05-21 13:12:27

回答

16

隐藏字段只是最简单的方式,这就是为什么他们使用相当多。

备选方案:在会话服务器端

  • 存储数据(带的sessionid cookie中)在事务的服务器端
  • 存储数据(与交易ID作为单个隐藏字段)
  • 使用URL路径,而不是隐藏字段的查询参数适用

主要关注:

  • 隐藏字段的值不能被信任,不会被页面翻页(与服务器端存储相反)
  • 大数据需要每次发布,可能是一个问题,而且是不可能的一些数据(例如上载的图像)

主要优点:

  • 的网页和多个浏览器窗口
  • 没有必要服务器端清理之间溅出无发粘的会话(为过期数据)
  • 到客户端访问的脚本
+1

+1对于优点和缺陷的优秀解释。 – IAbstract 2010-05-21 11:46:32

+2

缺少良好的替代ViewState来存储这些值。 – 2010-05-21 13:41:00

+1

@Tim:ASP.NET的ViewState *是使用隐藏的输入字段实现的。 – 2010-05-21 15:31:27

4

我看到/使用的最典型的用途是ID和其他东西,除了在某些时候需要发回服务器的其他原因,实际上并不需要在页面上。

-edit,应该已经包括多个detail-

说,比如你有一些对象要更新 - 用户界面发送回值的集合,并在这一点上,服务器可能会或可能不知道“嘿,这是一个客户对象”,所以你向服务器发出请求并说“嗨,给我ID 7”,现在你有系统知道你的客户对象。更新被应用,验证,无论什么时候,你的用户界面都会得到完整的结果。

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

1

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

3

有很多有用的场景。

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

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

12

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

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

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

可以使用URL,但会破坏设计规则,即修改数据时使用POST。而且,由于它对用户可见,所以它创建了更丑陋的URL。

3

它使东西出来的URL(如查询字符串),因此它保持清洁卫生。它也使Session不在Session中,可能不一定需要在那里。

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

3

继承人之一,在客户端代码(javascript)和服务器端之间传递数据的便捷方式。

1

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

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