HiddenField控件顾名思义就是隐藏输入框的服务器控件,它能让你保存那些不需要显示在页面上的且对安全性要求不高的数据。也许这个时候应该有这么一个疑问,为什么有了ViewState、Session和Cookie等状态保存机制,还需要用起HiddenField呢?

增加HiddenField,其实是为了让整个状态管理机制的应用程度更加全面。因为不管是ViewState、Cookie还是Session,都有其失效的时候,比如用户因某种需求要求设置ViewState为false,或者环境条件限制使用Cookie,或者用户长时间没有动作导致Session过期等等,那这个时候HiddenField无疑是最佳选择。

HiddenField控件的作用简单的说是用于存储需要在向服务器的发送间保持的值。它作为 <input type= "hidden"/> 元素呈现,并且通过添加runat=“server”就可以使它成为标准的HTML服务器控件。下面列出的是ASP.NET HiddenField Web服务器控件可以使用的属性和事件。

<asp:HiddenField EnableTheming="True|False" EnableViewState="True|False" ID="string" OnDataBinding="DataBinding event handler" OnDisposed="Disposed event handler" OnInit="Init event handler" OnLoad="Load event handler" OnPreRender="PreRender event handler" OnUnload="Unload event handler" OnValueChanged="ValueChanged event handler" runat="server" SkinID="string" Value="string" Visible="True|False" />

因为 HiddenField 的值将呈现给客户端浏览器,所以它不适用于存储安全敏感的值。若要为 HiddenField 控件指定值,请使用 Value 属性,请注意是Value而不是Text.事实上HiddenField并没有Text属性,这和DropDownList、CheckBoxList等标准按钮的属性命名方式一致。在标准的属性命名方式中,Text的值是呈现给用户看到的,而Value的值则是通长是通过代码进行控制的。例如你可以让DropDownList的Text属性显示用户名而让它的Value存储用户的编号。

下面的代码显示的是改控件的基本使用。

 <html> <head> <script language="C#" runat="server"> void Button1_Click(object sender, EventArgs e)

    { if (HiddenField1.Value == String.Empty)

    HiddenField1.Value = "0";

    HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value)+1)。ToString();Label1.Text = HiddenField1.Value;} </script> </head> <body> <h3><font face="Verdana">HiddenField</font></h3> <form runat=server> <asp:HiddenField id=HiddenField1 runat=Server /> <asp:Button id=Button1 Text="单击按钮" onclick="Button1_Click" runat="server" />单击 <asp:Label id=Label1 Text="0" runat=server /> 次</form> </body> </html>

在上面代码中, <asp:HiddenField id=HiddenField1 runat=Server />就定义了一个隐藏控件在按钮的单击事件里计算用户单击的次数,并将改次数赋值给Label1.

你可以将上面代码中的 <asp:HiddenField id=HiddenField1 runat=Server />改为<input type=hidden id=HiddenField1 runat=Server >也是可以的

在使用上面代码里,如果你从浏览器里查看源代码会得到如下的信息:<form name="Form1" method="post" action="Default.aspx" id="Form1">这是因为HiddenField是通过HTTP协议进行传递数据的,所以如果你通过" method="get"或者链接打开新的窗体页,那么HiddenField并不可用。

另外,HiddenField并不是取代Session来维护状态的,在上面例子里,虽然你点击一次按钮可以显示你点击的次数但是并不是说它可以记录你的状态信息。如果你重新打开浏览器那么你看到的此处仍然是0而不是3.

HiddenField事件
 
    HiddenField较为常用的是ValueChanged事件,该事件在Value值发生改变时触发该事件。然而在实际使用时,要知道页面记载顺序。在页面回传过程中,具体的页面周期你可以到如下网站查看http://msdn2.microsoft.com/zh-cn/library/ms178472.aspx下面的例子说明了这个问题

<head> <script runat="server" language="c#"> protected void Page_Load(object sender, EventArgs e)

    { Response.Write("<p>页面的Page_Load事件触发,触发时间是:" + DateTime.Now.ToString());if (HiddenField1.Value == String.Empty)

    HiddenField1.Value = "0"; }

    protected void Button1_Click(object sender, EventArgs e)

    { Response.Write("<p>Button1_Click为改变Hidden的值前事件触发,触发时间是:" + DateTime.Now.ToString());HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) + 1)。ToString();Label1.Text = HiddenField1.Value;

    }

    protected void HiddenField1_ValueChanged(object sender, EventArgs e)

    { Response.Write("<p>HiddenField的 ValueChanged事件触发,触发时间是:" + DateTime.Now.ToString()); }

    </script> </head>

    <body>

    <form id="form1" runat="server">

    <div> <asp:HiddenField ID="HiddenField1" runat="server" OnValueChanged="HiddenField1_ValueChanged" />

    </div> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

    <br /> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />

    </form></body>

    </html>

在这个例子里,我们想要的结果是:当用户单击按钮时,通过按钮的Button1_Click事件更改HiddenField1的Value,然后再触发HiddenField1的HiddenField1_ValueChanged事件,然而事实真的如此吗?

运行上面的代码,得到的结果正如你看到的,每次单击时,Button确实改变了HiddenField的值,但是我们在HiddenField1_ValueChanged里定义的输出并没有执行,换句话说页面并没有执行ValueChanged事件要理解这个问题还需要了解页面的声明周期,在页面周期过程中,你可以看到在Page_Init里是读取或初始化控件属性,然后再是Control events.这里的事件意思是说: 在Page_Init事件里,Web页面会接受用户回传的数据,例如将 <span id="Label1">Label</span>赋值给ID为Label1的Text属性,将 <input type="hidden" name="HiddenField1" id="HiddenField1" value="0" />的value值赋值给HiddenField1的Value属性。等所有初始化完毕了,页面才开始执行控件的事件——Button1_Click,在Button事件里将HiddenField的Value值改变。那么这里既然已经将Value值改变为什么没有执行ValueChanged事件呢?

此时,虽然这里已经将Value值改变,但是在Page_Init里保存的这是因为当前单击Button按钮时,虽然改变了HiddenField但同样又一次触发了页面的回复,也就是虽然在上一此HiddenValue的值为0,而此次将其值改为1,但是在页面回传后,由于ViewState会保存上次的装(这里是1),所以在Page_Init里,认为HiddenField的初始值为1,而本次还是1,使得它感觉数据没有变化,所以仍然不会触发ValueChanged事件

当然,你可以禁用HiddenField来进行处理,就可以执行ValueChanged事件,但是事实上你禁用ViewState后,页面不再保存ViewState的值使得页面认为每一次请求HiddenField的都是新的,例如如下代码:你并没有改变Hiddenfield的值,但是仍然每次都执行。

<%@ Page EnableViewState="false" %> <head> <script runat="server" language="c#">

    protected void Page_Load(object sender, EventArgs e)

    {

    if (HiddenField1.Value == String.Empty)

    HiddenField1.Value = "111";

    }

    protected void Button1_Click(object sender, EventArgs e)

    { // HiddenField1.Value = (Convert.ToInt32(HiddenField1.Value) + 1)。ToString();Label1.Text = TextBox1.Text; }

    protected void HiddenField1_ValueChanged(object sender, EventArgs e)

    { Response.Write("Changed." + DateTime.Now.ToString());Response.Write(HiddenField1.Value);Response.Write(TextBox1.Text); }

    </script> </head> <body>

    <form id="form1" runat="server"> <div>

    <asp:HiddenField ID="HiddenField1" runat="server" OnValueChanged="HiddenField1_ValueChanged" />

    </div>

    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

    <br /> <asp:TextBox runat=server ID=TextBox1></asp:TextBox>

    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />

    </form>

    </body>

    </html>

利用HiddenFile 并结合ASP.NET2.0提供的“交叉Cross Page”页面可以实现页面数据的传递,该情况针对这样的一种方案:在一个注册页面里,需要用户输入数据,由于备注一栏的数据可能很多,可以在新窗口可以利用类似FreeTextBox的控件让用户格式化文本,并在输入完毕后,返回原注册页面。关于这种情况,以后会介绍

转载于:https://www.cnblogs.com/ghx88/archive/2006/04/12/373750.html

ASP.NET2.0 HiddenField控件相关推荐

  1. 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.3 【增加了使用说明】

    ================================ 欢迎转载,但是请注明出处.本文出自博客园 .谢谢合作! ================================ 最新版本:V ...

  2. 利用ASP.NET2.0向导控件一步步建立与用户的交互--------提高和自定义用户体验

    本文是利用ASP.NET2.0向导控件一步步建立与用户的交互--------基本概念的后续文章,介绍了Wizard控件的高级使用以提高用户使用体验. 单击下面链接进行查看 http://www.cnm ...

  3. 【开源】我的分页控件正式命名为QuickPager ASP.NET2.0分页控件

    分页控件正式命名为 QuickPager ASP.NET2.0分页控件 . 版本号:2.0.0.1 Framework:.net2.0 分页方式:PostBack .URL (暂时没有实现URL的分页 ...

  4. ASP.NET2.0 分页控件 PagerPro.dll (1.1.0 最新)

    快来瞧,快来看了啊,新出炉的ASP.NET分页控件,热乎啦! 最新的ASP.NET2.0分页控件,经过对样式的处理,现有None和Standard两种样式,可以自定义是否显示Page Count 和 ...

  5. ASP.Net2.0 数据绑定控件的优越性在哪里?

    尽管有丰富.功能强大的编程接口,ASP.NET 1.x DataGrid 控件仍需要编写大量自定义代码来处理普通操作,如分页.排序.编辑和删除数据.例如,当用户单击以保存或取消更改时,DataGrid ...

  6. ASP.NET2.0 菜单控件menu的动态静态用法

    利用 ASP.NET Menu 控件,可以开发 ASP.NET 网页的静态和动态显示菜单.您可以在 Menu 控件中直接配置其内容,也可通过将该控件绑定到数据源的方式来指定其内容. 无需编写任何代码, ...

  7. 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.1——支持多种数据库。让分页更加简单。...

    分页控件的源代码下载网址:http://www.cnblogs.com/jyk/archive/2008/04/25/1170979.html (在网页的下面) 下载文件里面由一个测试网页:http: ...

  8. ASP.NET2.0登陆控件的使用(常见的三种方法)

    这里以CreateUserWizard 为例说明注册用户向导的常规使用 1)使用默认的向导控件功能   默认的注册向导的使用向导的简单,简单到如下只要一句话代码的地步:   <asp:Creat ...

  9. ASP.NET2.0自定义控件组件开发 第六章 深入讲解控件的属性

    深入讲解控件的属性持久化(一) 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第 ...

最新文章

  1. 基于强化学习的自动化剪枝模型
  2. R语言:数据筛选match
  3. 六、Excel中重要的数据透视表,必须要学会
  4. my Note debug - add to function
  5. WPF任务栏同步进度
  6. Java –手工Classloader隔离
  7. 《关于我的那些面经》——百度后端(附答案)
  8. [LeedCode]921. 使括号有效的最少添加
  9. Vue3 Composition API(一)——setup、reactive、ref、readonly
  10. 【华为云技术分享】HDC.Cloud|华为云Stack大咖说:如何实现微服务架构下的分布式事务
  11. 深入浅出之正则表达式(转载)
  12. r读取shape文件可视化_使用Python对大脑成像数据进行可视化分析
  13. java 创建Reader_java – 最佳实践:为XMLReader创建SAX解析器
  14. 【JavaEE】CH10 JDBC
  15. 如何用代码表白——matlab绘制玫瑰、爱心和I LOVE YOU
  16. 【基于MATLAB 的VQ声纹识别系统】
  17. 智慧产业园区综合解决方案
  18. MDM移动设备管理概述
  19. AT命令拨电话,如何判断手机的状态?
  20. 计算机房通气换气次数,地下制冷机房,水泵房,配电房的排风量按多少换气次数计算...

热门文章

  1. CAD图纸上面缺失的线条如何将其进行补充?
  2. LG_3459_[POI2007]MEG-Megalopolis
  3. kubernetes apiserver认证 1
  4. SVN:retrieval of mergeinfo unsupported by
  5. 桂电在linux、Mac OS环境下使用出校器(支持2.14)
  6. androidannotations 在android studio中的使用
  7. 一个关于 客户端非法取消正在进行的数据提交操作 的问题 的讨论
  8. 1.2、获取、创建 ApplicationContextInitializer
  9. java读取配置文件
  10. ARMv8体系结构基础04:算术和移位指令