问题描述
现正做一个自定义控件,其中需要用到如下内容:(1)在服务端利用代码加入服务器控件...HiddenFieldhf=newHiddenField();hf.ID="hf_TestID";hf.Value="初始值";this.Controls.Add(hf);//注.这里this是本自定义控件本身.Page.Response.Cookies["hfClientID"].value=hf.ClientID;//本行的目的是将本控件的ClientID写入Cookie...(2)在Javascript块中,对这个控件动态赋值:<scriptlanguage="JavaScript">functionSet_NewValue(value){varclientID=GetCookie("hfClientID");//GetCookie是用JavaScript写的一个读cookie的函数,经验证毫无问题varnewTextHiddenObj=document.getElementById(clientID);//经检验,这个ClientID确实是唯一的,没有任何其它重复的if(newTextHiddenObj!=null)newTextHiddenObj.value="新的动态值";alert(newTextHiddenObj.value);}</script>(3)上述内容看起来没有问题,而且alert语句也显示确实赋了新值.但在服务器端,想将这个新值存入数据库时,且无法得到这个值,无论在服务器端用hf.Value还是通过Page.Request["clientID"]的方法,均得到空值;(4)查看使用此自定义控件的页面源码,可以看到,页面适当位置添加了这样的记录:<inputtype="hidden"ID="ctl00_ContentPlaceHolder1_MyControl_hf"Name="ctl00$ContentPlaceHolder1$MyControl$hf"Value="初始值"/>应该说,这条记录是正确生成的.但令人不解的是,页面上通过按钮调用上述javascript方法给这个控件动态赋值后,再查看网页源码,此控件的Value值仍为"初始值",并未改变.但JavaScript的alert语句alert(newTextHiddenObj.value);显示的却是新值;请教高手这是怎么回事?这个值赋哪去了?服务器端如何获得.先谢了.
解决方案
解决方案二:
this.Controls.Add(hf);动态添加的控件再返回服务器时,又经过pageload一次,就不存在了,没有保存viewstate最简单的办法是再pageload中iddenFieldhf=newHiddenField();hf.ID="hf_TestID";hf.Value="初始值";this.Controls.Add(hf);//注.这里this是本自定义控件本身.建议看一下asp。net的控件或页面生存周期相关