隐藏域其实是html网页代码中的隐藏类表单的标签,可以在里面写入值集,但在网页表面上是不会显示出来的。具体形式<input type="hidden" name="" id="" value="123456"/>。

可见type="hidden"就表示它是隐藏域,在value中保存一些值集,通过name、id或其他方式进行获取和修改。
它有很多作用例如:传值、安全,都会用到的,当你缺什么值就可以在页面隐藏传值,页面不显示。功能与其他的input一样,只不过用户不能直接看见,用来辅助服务器完成一些动作。

隐藏域在页面中对于用户是不可见的,在表单中插入隐藏域的目的在于收集或发送信息,以利于被处理表单的程序所使用,下面为大家详细介绍下此隐藏域在实际中时如何使用的:
基本语法:
<input type="hidden" name="field_name" value="value">

作用:

1 隐藏域在页面中对于用户是不可见的,在表单中插入隐藏域的目的在于收集或发送信息,以利于被处理表单的程序所使用。浏览者单击发送按钮发送表单的时候,隐藏域的信息也被一起发送到服务器。

2 有些时候我们要给用户一信息,让他在提交表单时提交上来以确定用户身份,如sessionkey,等等.当然这些东西也能用cookie实现,但使用隐藏域就简单的多了.而且不会有浏览器不支持,用户禁用cookie的烦恼。

3 有些时候一个form里有多个提交按钮,怎样使程序能够分清楚到底用户是按那一个按钮提交上来的呢?我们就可以写一个隐藏域,然后在每一个按钮处加上onclick="document.form.command.value="xx""然后我们接到数据后先检查command的值就会知道用户是按的那个按钮提交上来的。

4 有时候一个网页中有多个form,我们知道多个form是不能同时提交的,但有时这些form确实相互作用,我们就可以在form中添加隐藏域来使它们联系起来。

5 javascript不支持全局变量,但有时我们必须用全局变量,我们就可以把值先存在隐藏域里,它的值就不会丢失了。

6 还有个例子,比如按一个按钮弹出四个小窗口,当点击其中的一个小窗口时其他三个自动关闭.可是IE不支持小窗口相互调用,所以只有在父窗口写个隐藏域,当小窗口看到那个隐藏域的值是close时就自己关掉。

 

 

隐藏域---ViewState---ControlState----->保存数据的另一个场所

 

1.使用隐藏域

 

  除了Session、Application和Cache可以保存数据外,那还有哪里可以让我们暂时保存数据呢?那就是页面!我们可以设置一个控件隐藏,那我们就可  以用这个控件来保存一些临时数据,供当前页面的程序使用
 
  同时,我们还可以使用隐藏域来进行类似的工作,但在隐藏域中填写的内容不会直接显示在IDE的设计视图中,代码如下:
  <asp:HiddenField ID="HiddenField1" runat="server" Value="编程快乐"/>

 

  在代码中可以直接访问隐藏域的Value属性获得其值:
  Response.Write(HiddenField1.Value);

 

  不过,这样做有几个不合理的地方:
  数据直接暴露给用户、只能存储字符串数据

 


2.使用ViewState(视图状态)

 

  ViewState主要是用来存放和视图有关的一些状态,ASP.NET通过ViewState自动保存控件的状态,同时,我们也可以利用ViewState来保存一些程序需  要的数据,ViewState中的数据默认是使用base64进行编码的,因此,用户不能直接看到里面的数据
 
  在代码中添加一个ViewState项:  ViewState["test"]="编程快乐";
  查看源代码:<input type="hidden" name="_VIEWSTATE" id="_VIEWSTATE" value="xt+q3cdaffdsaefcsaesefdserfs">

 

  既然ViewState是存在页面上,那么ViewState则不能跨页使用,每个用户访问到得ViewState都是独立的,另外,页面在ViewState就在,页面关闭  ViewState就关闭

 

 
3.ViewState的安全与性能

 

  保证安全性:保证客户端提交过来的ViewState没有被修改、保证用户不能直接看到ViewState中的数据(加密)

 

  对ViewState进行验证和加密:
  <%@ Page Language="C#" EnableViewStateMac="true" ViewStateEncryptionMode="Always"%>

 

  如果要对所有页面进行ViewState的验证和加密,可以在Web.config的system.Web节点中添加:
  <pages enableViewStateMac="true" ViewStateEncryptionMode="Always"></pages>

 

  既然ViewState中的数据时序列化后加入的,那么我们就可以把一些复杂的类型(比如类)存放到ViewState中,比如:
  MyUser user=new MyUser("小猪",20);
  ViewState["CustomClass"]=user;

 

  读取代码:
  MyUser user=ViewState["CustomClass"] as MyUser;

 

  ViewState中尽量保存少量的数据,如果实在需要在ViewState中放置大量的数据建议使用maxPagesStateFieldLength对ViewState启用分块传输:
  <%@ Page Language="C#" maxPageStateFieldLength="100"%>

 

  ASP.NET会把控件交互相关的一些数据都存放到ViewState中,但是对于一些不识闲任何交互的控件,可以设置控件的EnableViesState属性为false来  让控件不适用ViewState,从而减少页面体积

 

 

 

4.ControlState
  用于保存(自定义)控件的关键信息
  就算页面或者控件的ViewState被关闭它还能起作用,弥补了ViewState能被禁止的不足
  但是使用ControlState稍显复杂,我们需要自己序列化复杂对象进行存储

 

  在ControlState中保存和读取简单字符串的代码:
     PageStatePersister.ControlState="编程快乐";
     Response.Write(PageStatePersister.ControlState.ToString());

 

5.对隐藏域、ViewState和ControlState的总结
 
    存储的物理位置:表单隐藏域
    存储的类型限制:可序列化类型(直接在隐藏域中保存内容需要自己序列化)
    状态使用的范围:当前页面(当前控件),对用户独立
    存储的大小限制:存储过大数据会导致页面不能正常打开,不能正常提交
          生命周期:页面在就在,页面不在就不在了,三者始终是衣服在页面的隐藏域中
        安全与性能:在客户端存储,安全性低,不过,ViewState提供了验证和加密
  优缺点与注意事项: 存储少量数据非常方便简单,但需要注意不要存储敏感数据,不要存储过大数据,隐藏域、ViewState和ControlState始终参与                   往返,而且序列化和反序列化会消耗一定资源,因此,存储过大的数据会导致网页加载过慢,浪费服务器带宽

 
  HTML语言创建普通隐藏域
 
  <input type="hidden" name="hdncount" value="值">
 
  JavaScript语言创建隐藏域
 
  <script>
 
  function add(value)
 
  {
 
  var value= 1
 
  document.all.divHidden.innerHTML="<input type=hidden name=hdncount value=" + value+ ">";
 
  }
 
  </script>
 
  注意:
 
  表单提交时因为隐藏域的ID是一样的,在多个隐藏域时,提交到action或者接收页面的为数组的形式。
 
  Dreamweaver插入隐藏域
 
  菜点栏“插入”→“表单”→“隐藏域”→点击设计视图中的隐藏域→在“属性”面板中输入“required”→在“值”中输入要求的项目
 
  在.net中,隐藏域是利用HiddenField来实现的
 
  这里的隐藏域同其他的一样不显示在用户的浏览器中,但是我们可以像设置标准控件的属性一样设置其属性。
 
  当一个网页被提交给服务器时,隐藏域的内容和其他控件的值一块被送到HTTP Form集合中。
 
  隐藏域的优点
 
  1、不需要任何服务器资源。
 
  2、支持广泛,任何客户端都支持隐藏域。
 
  3、实现简单,隐藏域属于HTML控件,无需像服务器控件那样有需要编程知识。
 
  隐藏域的不足
 
  1、具有较高的安全隐患。
 
  2、存储结构简单。
 
  3、如果存储了较多的较大的值,则会导致性能问题。
 
  4、如果隐藏域过多,则在某些客户端中被禁止。
 
  5、隐藏域将数据存储在服务器上,而不存储在客户端。
 
  注意,如果开发中,页面的隐藏域过多,这些隐藏域被存储在服务器。当客户端浏览页面的时候,会有一些防火墙扫描页面,以保证操作系统的安全,如果页面的隐藏域过多,那么这些防火墙可能会禁止页面的某些功能。