选择显示字体大小

asp.net2.0 hiddenfield控件(2)

     在这个例子里,我们想要的结果是:当用户单击按钮时,通过按钮的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的控件让用户
  格式化文本,并在输入完毕后,返回原注册页面。关于这种情况,以后会介绍
    


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons