一个很现实的问题,刷新后保持控件刷新前的状态的问题!
一个很现实的问题,不知道大家都是怎么解决的. 
 问题: 
 在页面刷新的时候,记录一个图标的状态(是否显示,即display的值),显示上一次,即刷新前的状态.   
 以往的办法: 
 在页面中上有一个图标(id= "img001 "),把它设为runat= "server ". 
 同时在页面里放一个隐藏的服务器控件TextBox,记录这个状态值. 
 页面刷新,加载完成以后,调用后台方法,先通过FindControl找到这个图标,然后根据TextBox值,将Style[ "display "]   =    "none "或 " "; 
 这样就可以完成控制实现.   
 现在的问题: 
 这个图标放到了一个Repeater控件的循环体里,这样它ID是动态加载的: 
 <img   id= <%DataBinder.Eval(Container.DataItem, " ")%> > 
 现在的问题出来了:在VS2005中,runat= "server "控件的id只允许是简单的常量,这样当在上述的img标签里添加了runat= "server "以后,连编译都通不过了(如果单是跑在页面的,是没问题的). 
 在这种情况下,前面提到的方法就不可行了.   
 我还试了在   img   里写了onload()事件的脚本,在脚本里读取隐藏TextBox的值,然后比较ID,再控制其显示还是隐藏.但是,可惜,在onload()事件发生的时候,这个隐藏的服务器控件TextBox的值还没从ViewState里取过来(控件加载在先,数据加载在后).因此每次读取的值都是空的,自然无从比较.   
 现在我也想不出有什么好的办法可以实现刚才提到的问题了,请各位大狭帮我出出注意^^
------解决方案--------------------在page_load里面写上   
     protected void Page_Load(object sender, EventArgs e) 
     { 
         try 
         {              
             if (!IsPostBack) 
             { 
                 this.DriveTypeID = UtilTool.ToSafeInt32(Request.Params[ "ID "]); 
                 this.BindDriveShow(1); 
                 //this.BindDrive1Type(); 
                 //this.BindDrive2Type(); 
             } 
         } 
         catch(Exception ex) 
         { 
             this.lblMessage.Text = ex.Message; 
         } 
     }   
 这样试试
------解决方案--------------------如果改变状态后,没提交到服务器,就刷新了,这样当然是不能还原的,如果提交过后,就会保存在ViewState里的,这样你就可以记取出来再设置了
------解决方案--------------------方法是改变状态的时候,修改某一隐藏域的值
------解决方案--------------------我没有看你写的“现在的问题:”那一行以下的内容。   
 web控件本来就是自己保持Style状态的,你说它不能保存Style是没有道理的。 
 例如:   
          <asp:Image ID= "Image1 " runat= "server " ImageUrl= "http://www.google.com/images/google_sm.gif " />  
          <br />  
          <asp:Button ID= "Button1 " runat= "server " Text= "改变Visible属性 " OnClick= "Button1_Click " />  
          <br />  
          <asp:Button ID= "Button2 " runat= "server " Text= "改变display样式 " OnClick= "Button2_Click " />  <br />  
          <asp:Button ID= "Button3 " runat= "server " Text= "什么也不做 " />      
 protected void Button1_Click(object sender, EventArgs e) 
 { 
     this.Image1.Visible = !this.Image1.Visible; 
 }   
 protected void Button2_Click(object sender, EventArgs e) 
 { 
     this.Image1.Style[ "display "] = 
         this.Image1.Style[ "display "] ==  "none " ?  "inline " :  "none "; 
 }   
 protected void Page_Load(object sender, EventArgs e) 
 { 
     this.SmartNavigation = true; 
 }   
 执行之后可以看到,控件在被动刷新的时候,其display样式总是服务器端正确设置的。   
 除非你有在问题中没有说过的操作需求,否则根本用不着为display保持刷新前的状态担心。
------解决方案--------------------我的图标的动态加载的,每次刷新都加载一遍(放在repeater控件里),当然ID还是一样的. 
 —————————————————————————————————————————— 
 动态加载是完全一样的。   
 我把例子改了一下:   
          <asp:PlaceHolder ID= "PlaceHolder1 " runat= "server ">  </asp:PlaceHolder>  
          <br />  
          <asp:Button ID= "Button1 " runat= "server " Text= "改变Visible属性 " OnClick= "Button1_Click " />