aspx页面的Timer控件会影响内容显示,如何解决?

问题描述

我的aspx页面中有个GridView控件,其中有一个[删除]列:<asp:CommandFieldDeleteText="<divid=&quot;de&quot;onclick=&quot;JavaScript:returnconfirm('确定删除吗?');>【删除】</div>"ShowDeleteButton="True"><ItemStyleForeColor="Red"Width="30px"/></asp:CommandField>在GridView控件的OnRowDataBound事件中根据条件,如果所在行不允许删除,则【删除】文本修改为空,以避免出发删除操作:if(e.Row.RowType==DataControlRowType.DataRow){//强制修改【删除】列的文本if(当前行不允许删除)e.Row.Cells[1].Text="";}同时,页面中还有一个Timer控件,每5秒触发一次,结果第一次显示页面时结果正常,不允许删除的行[删除]列都为空,一旦Timer定时到期,原先为空的[删除]列又重新显示为【删除】,即便Timer控件中不执行任何代码时也是如此,请问有办法解决这个问题吗?

解决方案

解决方案二:
这个可能是因为Timer刷新了页面但没有OnRowDataBound,所以都显示出来了
解决方案三:
是这样的,Timer刷新并没有激活OnRowDataBound,导致显示内容被刷新成原始内容,也没有办法避免呢?
解决方案四:
有人遇到这样的问题吗?
解决方案五:
禁用ViewState看看行不行?
解决方案六:
禁用ViewState后Grid内容会在定时到期后被清空
解决方案七:
没有办法。因为你的代码的逻辑本身就是如此的。asp.net本来就是”一遍遍刷新html”的机制,它并不是像服客户端应用那样在一个页面上不刷新的。你用Timer,这当然就是为了刷新页面,丢弃一切未提交刷新过的客户端操作数据。从基本原理上,你的程序就是这个结果。要解决它,从基本原理上入手,放弃你的选择,学习真正做到无刷新(asp.net绝不处理UI)的编程知识。或者,放弃你的业务交互设计。要知道asp.net的机制决定了它的硬伤,无法解决。
解决方案八:
如果你的Timer在一个UpdatePanel内,并且这个UpdatePanel与GridView无关(UpdatePanel并不包含数据编辑行),那么UpdatePanel局部刷新时是可以部分地解决这类问题。但是,这要求你的Timer与GridView中任何东西都没有关系,否则只要是你去刷新GridView就会丢失用户编辑数据。而且UpdatePanel其实会在服务器端一遍遍地重建整个页面对象,执行所有事件,最后只是更新Timer所在的一点点html,这是很“重”的程序。不但你不能更新GridView中任何东西,而且用户操作时会同时感觉卡。
解决方案九:
如果你只有你贴出的这一点点代码,实际上你的代码if(e.Row.RowType==DataControlRowType.DataRow){//强制修改【删除】列的文本if(当前行不允许删除)e.Row.Cells[1].Text="";}这里是不对的,应该为你的设计代码<asp:CommandFieldDeleteText="<div......绑定Visible属性,例如<asp:CommandFieldVisible='<%#CheckVisible(Container.DataItem)%>'DeleteText="<div并且自己实现CheckVisible函数来判断。而你的那种e.Row.Cells[1].Text="";代码根本不能保持状态。但是,这只是在你的程序很初级的情况下才可以!因为你是用的是Timer,是个非常任性的东西,它破坏的绝非简单的状态,还有用户操作。用户操作编辑到GridView某一行到一半,突然就被刷新了,这种事情放到任何人那里都无法接受。因此只要Timer会造成GridView任何一行刷新,这就是逻辑设计错误的。如果你这问题认为是“去让删除按钮去再次显示对的状态”,那么其实从原理上就错了。这就是捡了芝麻丢了西瓜,制造出了更大的麻烦。
解决方案十:
sp1234说的很有道理,学习了,非常感谢!Timer的确很任性,但为了让用户不用主动刷新列表,也只好这么处理了,好在页面没有其它交互操作,否则肯定难以忍受,设置visible属性倒是可以实现,但列就错位了,在不允许删除的行中,删除按钮列会消失,后续列会前移;我试过也可以使用enabled属性,但缺点就是[删除]列都显示一样的内容,无法直观判断哪行不允许删除
解决方案十一:
OK,问题解决,在OnRowDataBound事件中设置Cell的Enabled和ForeColor属性可以不受Timer的影响

时间: 2024-12-22 11:13:51

aspx页面的Timer控件会影响内容显示,如何解决?的相关文章

从cs传一个int变量到aspx页面的sqlDataSource控件出现错误

问题描述 <asp:SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString="<%$ConnectionStrings:guoweikuangConnectionString%>"SelectCommand="SELECT[ArticleID],[Title],[Contents]FROM[content]WHERE[ArticleID]="

timer-DEV 第三方控件中的使用中自定义用户控件里面的Timer 控件的使用

问题描述 DEV 第三方控件中的使用中自定义用户控件里面的Timer 控件的使用 用户控件中使用的代码如下:/asp:ScriptManager /asp:Timer /asp:Literal /asp:UpdatePanel 为什么到事件刷新的时候会报 " Sys.WebForms.PageRequestManagerParserErrorException: 未能分析从服务器收到的消息." 这个错误呢?请指教一下 解决方案 asp不会,jsp会一点,祝你好运!

请教一个在aspx页的 服务器端控件 的 属性 中使用嵌入代码的问题(&amp;amp;lt;%= %&amp;amp;gt;,&amp;amp;lt;%# %&amp;amp;gt;)

问题描述 最近遇到了一个在aspx页的服务器端控件的属性中使用嵌入代码的问题,请大家看看比如一个链接控件:在NavigateUrl属性中绑定数据,并添加字符串<asp:HyperLinkID="StartMeeting"runat="server"Target="_blank"NavigateUrl='<%#"PagesLecturer/lecture.aspx?HandoutId="+Eval("Han

C# Winfrom项目,如何在from窗体中控制两个timer控件时间的同步显示

问题描述 C# Winfrom项目,如何在from窗体中控制两个timer控件时间的同步显示 在C# Winfrom项目中,一个from窗体,两个timer控件(timer1和timer2),两个Label控件(labe1和label2), timer1是实现0到1分钟的倒计时显示在显示labe1中,timer2是实现到1分钟后自动显示当前时间到label2中. 两个button控件(button1和button2).button1和button2分别控制timer1的开始和暂停. timer1

项目子文件夹中aspx页面上Telerik控件, 运行问题

问题描述 看标题有点复杂,我稍微解释一下.项目有一个解决方案,解决方案下面有多个项目,其中一个为WebApplication项目,里面都是aspx页面.初期这些网页都在WebApplication目录下,这个时候所有控件运作正常.前段时间,重新整理了下项目,将一些页面分类,规整到WebApplication下面各自的子文件夹中.比如目前结构如下:WebApplication........子文件夹1................页面1................页面2........子文件

如何把System.Drawing.Image对象img,在页面的Image控件上显示出来

问题描述 RT:byte[]filedata=img;System.IO.MemoryStreamms=newMemoryStream(filedata);System.Drawing.Imageimg1=System.Drawing.Image.FromStream(ms);//定义文件名stringiname=DateTime.Now.ToString("yyMMddhhmmss");img1.Save(Server.MapPath("pic\")+iname+

【ASP.NET】请问怎样通过当前月份判定页面的panel控件是否显示

问题描述 DateTimedttime=DateTime.Now.Month;switch(Month){case1:this.Panel1.Visible="ture";······case12:this.Panel12.Visible="ture";}好像各种不对······· 解决方案 解决方案二:this.Panel1.Visible="ture";应该是this.Panel1.Visible=true;才对吧Visible属性本来就是布

c# winfrom项目,webbrower控件中加载页面过程中导致timer控件显示时间会停一小会

问题描述 c# winfrom项目,webbrower控件中加载页面过程中导致timer控件显示时间会停一小会 在C# Winfrom项目中,from窗体中,有一个webbrower控件用于加载网页,在webbrower控件内放了一个label控件(用于显示当前时间),还有一个timer控件(用于控制label显示时间,显示格式为:hh:mm:ss,). 目前遇到个问题,当webbrower控件用于加载数据量较大的网页时,在网页加载的过程中,会导致label控件显示时间中的秒时, 会停顿两至三秒

ASP.NET AJAX Timer控件概述

Timer 控件方案 当您要执行以下操作时,请使用 Timer 控件: 定期更新一个或多个 UpdatePanel 控件的内容,而无需刷新整个网页. 每当 Timer 控件导致回发时运行服务器上的代码. 按定义的时间间隔将整个网页同步发布到 Web 服务器上. 背景 Timer 控件是一个服务器控件,它会将一个 JavaScript 组件嵌入到网页中 .当经过 Interval 属性中定义的时间间隔时,该 JavaScript 组件将从浏览器 启动回发.您可以在运行于服务器上的代码中设置 Tim