framework2.0
要达到效果:
当点击gridview中任一条记录的linkbutton(在RowDataBound时,捆有唯一标识该条记录的id)时,下面的iframe可以显示详细的编辑页面,并且显示该条记录的各个field值。要求每次点击时,整个页面不刷新,只有iframe刷新。
我的问题是,如何把点击的那条记录的所有属性值都传给iframe?
因为gridview绑定的datatable里的值是从不同server上远程取回来拼接成的,相当麻烦。每条记录都含有很多信息。如果每次只传焦点记录的id给iframe,然后重新去取该条记录的信息的话,并不是不可以,只是我觉得似乎损耗很大,所以希望可以利用已经取出来的存在datatable中的值。
其实这个效果如果允许整个页面刷新的话,我已经实现了。但现在要求用iframe局部刷新,不允许刷新全页面了...
原来的方法:
dt = (DataTable)ViewState["datatable"]; //用ViewState["datatable"]存的就是绑定gridview的数据源
DataRow[] row = dt.Select("id='" + ((LinkButton)sender).CommandArgument.ToString()+"'"); //整个页面刷新时,我用这种方法取出具体每条记录信息。然后依次把各个属性赋值给各个控件...
现在要求局部页面刷新的话,我应该怎么在不刷新整个页面的前提下,把每一条数据的所有datarow里包含的信息都传给iframe呢?不刷新页面就不能执行后台代码那怎么取值传值啊? (┬_┬)
之前没有使用过iframe的经验,现在完全傻了,不知道该如何着手,请大家给点建议。关于我上面现有的做法有地方做的不好的,也欢迎大家指点,谢谢了!
(因为某些原因不允许使用ajax,所以选择了iframe,所以请大家不要建议我如何用ajax实现了... Orz)
如果专递选中行的所有信息在iframe中显示的话,还用iframe干什么啊?,直接div或者其它载体就可以了。
用iframe的目的是处理刷新的客户体验问题。所以直接传递id 吧。直接再从服务器取数据。方便、简单。性能没有你想象的大量损失。毕竟它就是干这个的啊。
没什么好建议,只有想说:
如果每次只传焦点记录的id给iframe,然后重新去取该条记录的信息的话,并不是不可以,只是我觉得似乎损耗很大
-------------------
并没有你想象的损耗很大的情况存在,相比,你用了现复杂的代码去实现,更显的损失更大:一来是精力,二来是代码更为多杂。
合理的判断性能及用简洁的方法实现功能,是一门我们大家需要学习与掌握的。
用js的方式可以不?我假设你用jq。
GridView page写一个function,如
function GetMyData(id)
{
//一些dom操作,用jq可以很简单获取数据
return {id:aa,name:bb}; //返回一个对象
}
iframe 的page $(document).ready 中,执行
myObject=top.GetMyData(idValue)
这样就可以了。我这里假设你的GridView page是最上一页,如果不是,也可以用parent.GetMyData
某些原因不能用Ajax,与和谐社会有冲突?建议还是重新设计吧,这样的项目不如不做。