为了账号安全,请及时绑定邮箱和手机立即绑定

一个UpdatePane和GridView使用时的诡异问题

一个UpdatePane和GridView使用时的诡异问题

繁星点点滴滴 2018-12-06 12:15:35
最近项目中用到微软提供的UpdatePanel来做ajax,考虑其简洁性和易用性,便毫不考虑就采用此方案,可是项目遇到一个让我很是头疼的问题,场景如下: 在一个UpdatePanel有一个GridView,其中该GridView的某些列是在服务器端通过逻辑控制显示的效果,代码如下: protected virtual void ListGridView_RowDataBound(object sender, GridViewRowEventArgs e)        {            if (e.Row.RowType == DataControlRowType.DataRow)            {                if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate)                {                    if (e.Row.FindControl("DeleteButton") != null)                    {                        ((LinkButton)e.Row.FindControl("DeleteButton")).Attributes.Add("onclick", "javascript:return confirm('你确认要删除该条数据吗?');");                     e.Row.Cells[e.Row.Cells.Count - 3].Text = string.Format(Constants.UIStringDisabledLinkTemp, "download", "附件不存在,不能下载!");                    }                }            }        } 在页面第一次加载的时候,其一切都正常,可是当点击GridView的排序的时候,之前格式化的附件不能下载的列,就发生了诡异变化,本来页面初始化的时候判断是不能下载,应该显示灰色的下载图片,可是点击排序后页面的图片就都变成亮色了,跟断点没有发现什么错误,可是如果把GridView从UpdatePanel中拿出来,执行上面的操作没有问题,就是在UpdatePanel中就有问题。 自己分析一下,UpdatePanel实际就是指定一个局部刷新的面板,当该面板中有任何请求服务器端的请求(其实就是_doPostBack事件),微软的ScriptManager都会截获请求,然后用ajax的方式发送到服务器端,从而实现异步刷新局部区域,当然在请求结束后页面updatepanel内的元素将会重新刷新为最新的dom元素,这就让我纳闷了,难道我的代码在服务器端没有执行,可是断点显示在服务器端的逻辑一切都正常,可是就是到客户端就发生这种莫名其妙的灾难,难道是页面的缓存?经过测试也不是,或者说页面返回的dom元素是数据在还没全部渲染后就返回的?或者说RowDataBound事件在服务器没有执行完,就返回到页面了? 总之很多的疑惑让我很费解,还请那位大侠来指点一下,不胜感激。
查看完整描述

8 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

问题终于解决,在服务器端GridViewCommand事件里,在点击EditButtong的逻辑里,最后要bindData一下,因为这样才能再一次让GridView自动调用RowDataBound事件,这样DeleteButton的状态就会正常,看来没有弄明白事件的执行顺序啊,惭愧!

查看完整回答
反对 回复 2019-01-21
?
三国纷争

TA贡献1804条经验 获得超7个赞

你还是对UpdatePanel不是很了解,建议你在网上看一下这个控件的用法。

查看完整回答
反对 回复 2019-01-21
?
手掌心

TA贡献1942条经验 获得超3个赞

感谢你的回复,的确使用这个UpdatePanel也就是在这个项目中使用,根据我的理解:

UpdatePanel其实就是微软设定一个局部更新的区域,他又很多更新方式,可以支持传统的post更新,也支持异步更新,UpDateMode等一些基础的特性都已经学习了,还有客户端的ScriptManager客户端生命周期也基本了解:begin_request, pageLoading, pageLoaded, endRequest等客户端事件,不知道这里的问题是什么原因导致的,update的基本属性都已经尝试过也研究过也没发现解决方案,还请大侠指教.

查看完整回答
反对 回复 2019-01-21
?
萧十郎

TA贡献1815条经验 获得超13个赞

@shen110: 一直都没看到你在哪里怎么把控制设置不可用,代码贴出来看看。

查看完整回答
反对 回复 2019-01-21
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

前端样式和js的问题?猜的

查看完整回答
反对 回复 2019-01-21
  • 8 回答
  • 0 关注
  • 437 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信