首页 新闻 会员 周边 捐助

关于父窗口给页面中的iframe传递数据的问题

0
[已解决问题] 解决于 2011-01-08 07:34

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)

问题补充: 除了ajax,jquery也不能用的说。。。(┬_┬) 一楼的大侠说的很有道理,可是再重新取一遍id的话,真是一点也不想再重新来一遍麻烦的取值流程。。。。 orz 也可能是我编码的质量不高,没有设计好所以才觉得没法代码重用吧。。。 好桑心。。。。大家还有什么好建议么。。。(┬_┬)
我爱阳光的主页 我爱阳光 | 菜鸟二级 | 园豆:204
提问于:2011-01-06 17:38
< >
分享
最佳答案
0

如果专递选中行的所有信息在iframe中显示的话,还用iframe干什么啊?,直接div或者其它载体就可以了。

用iframe的目的是处理刷新的客户体验问题。所以直接传递id 吧。直接再从服务器取数据。方便、简单。性能没有你想象的大量损失。毕竟它就是干这个的啊。

邢少 | 专家六级 |园豆:10926 | 2011-01-07 09:38
是这样么?我只是觉得再做一遍繁琐又很类似的流程似乎很不应该.... (┬_┬) 认真考虑您的建议... 谢谢。
我爱阳光 | 园豆:204 (菜鸟二级) | 2011-01-07 09:42
于是最后还是重新取了一遍........ ><
我爱阳光 | 园豆:204 (菜鸟二级) | 2011-01-08 07:35
其他回答(3)
0

没什么好建议,只有想说:

如果每次只传焦点记录的id给iframe,然后重新去取该条记录的信息的话,并不是不可以,只是我觉得似乎损耗很大

-------------------

并没有你想象的损耗很大的情况存在,相比,你用了现复杂的代码去实现,更显的损失更大:一来是精力,二来是代码更为多杂。

合理的判断性能及用简洁的方法实现功能,是一门我们大家需要学习与掌握的。

路过秋天 | 园豆:4787 (老鸟四级) | 2011-01-06 22:32
您说的有道理,确实按目前的情况来看,我要按这个思路想下去会花费很多的时间和精力,可是如果用id重新去取单挑记录的信息的话,为了拼全每一条记录所需要的全部信息真的是很麻烦,要连接两遍不同的远程服务器分别取值,然后想办法拼接什么的....很多操作感觉几乎就是重复之前的部分,可是又没法跟之前的操作合并到一起代码重用什么的,于是就有点不甘心。我现在确实是有点纠结不知道该怎么办好了。。。 (┬_┬)
支持(0) 反对(0) 我爱阳光 | 园豆:204 (菜鸟二级) | 2011-01-07 09:02
忘了说,那个远程服务器的连接情况也不是很好,速度很慢,这也是我尽可能的想减少连接他们的原因之一。。。。 (┬_┬)
支持(0) 反对(0) 我爱阳光 | 园豆:204 (菜鸟二级) | 2011-01-07 09:03
0

用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

沉默的糕点 | 园豆:1786 (小虾三级) | 2011-01-07 01:00
非常感谢您的指点,可是。。。jquery也不可以用啊。。。。 我哭了。。。 (┬_┬)
支持(0) 反对(0) 我爱阳光 | 园豆:204 (菜鸟二级) | 2011-01-07 09:04
0

某些原因不能用Ajax,与和谐社会有冲突?建议还是重新设计吧,这样的项目不如不做。

小城故事 | 园豆:526 (小虾三级) | 2011-01-07 09:18
。。。 上面指示不让用我能咋办? (┬_┬)
支持(0) 反对(0) 我爱阳光 | 园豆:204 (菜鸟二级) | 2011-01-07 09:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册