none
采用ajax技术时,listview控件的使用问题,很头疼? RRS feed

  • 问题

  • webform的网站开发。
    首先,排除掉updatapanel,这个东西的性能就不说了。
    然后是MS ajax 的客户端编程,这里面用到了webservices,核心是scriptmanager,再配合webmethod。
    可是,目前我的网页中大面积采用了Jquery,ajax也是采用Jquery的$.ajax()来做。现在问题就来了:
    $.ajax()从服务器端获取到数据,json格式,现在要把数据填充到listview中,可是listview在服务端,而且它的数据源也有一定要求。
    如果把整个listview对象作为数据传递给ajax请求,客户端对应的div标签下$("#showlist").html(data)就可以了。
    但是这个具体怎么实现?如何把listview整个传递过去?另外这样会不会导致性能降低(有点像updatapanel)?
    其实,我就是想省去在客户端写html字串控制列表样式的麻烦,同时也不用自己写分页,可以用DataPager控件配合listview。
    所以最理想的状态是:客户端listview提供列表样式,DataPager提供分页,Jquery提供异步数据。
    不知道可否实现?或者有什么好的替代方案?谢谢!!
    2009年5月21日 9:57

答案

  • 你要清楚:AJAX本来就是由HTML、CSS、JavaScript、DHTML 和DOM 组成的,无需再使用 listview了。ajax和listview分别是客户端和服务器端的技术。既然已经传回到客户端了,那就直接创建显示界面就行了,如果你使用listview,则无需使用json将数据传回到客户端了,服务器端可以直接将listview的绑定结果传回来就可以了
    【孟子E章】
    • 已标记为答案 hooluupog 2009年5月22日 6:09
    2009年5月21日 15:18
    版主

全部回复

  • 如果你要传递整个ListView生成的HTML,这就跟UpdatePanel差不多了。如果你对性能没所谓,可以这样做。否则,建议你还是传输JSON数据比较好。
    Microsoft ASP.NET MVP
    2009年5月21日 10:42
    版主
  • 如果你用jquery,为什么不自己做一个listview而非要使用服务端控件呢?

    你的想法很好,现在有个比较成熟的方案是前台用js+div+css,后台部分用C#,这样还是比较不错的,看上去你比较不喜欢服务器端控件,可以试试这个思路。

    另外我觉得updatepanel控件效率还行。。

    低调,低调
    2009年5月21日 10:45
    版主
  • 谢谢大家!
    我现在就是很矛盾呀。因为怕麻烦,不想再自己写html串了,比如自己写个listview,关键是那个datapager很吸引我,如果自己写listview的话,那么分页也得自己写了。我刚才看了一下,可以将取到的json数据通过js指定到对应的itemTemplate中,那么listview也可以用了,可是还是老问题:
    数据源怎么办?如果这样手动指定,listview肯定是不支持分页的。
    2009年5月21日 11:12
  • 你要清楚:AJAX本来就是由HTML、CSS、JavaScript、DHTML 和DOM 组成的,无需再使用 listview了。ajax和listview分别是客户端和服务器端的技术。既然已经传回到客户端了,那就直接创建显示界面就行了,如果你使用listview,则无需使用json将数据传回到客户端了,服务器端可以直接将listview的绑定结果传回来就可以了
    【孟子E章】
    • 已标记为答案 hooluupog 2009年5月22日 6:09
    2009年5月21日 15:18
    版主
  • 服务器端可以直接将listview的绑定结果传回来就可以了

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

    非常感谢您的解答!可是这样的传回方式不是ajax的,会造成页面的刷新。而我又用了jquery,没办法用asp.net ajax里基于scriptmanager的webmethod。
    asp.net ajax(atlas)里好像是list绑定一个datasource,然后这个datasource通过webservices(一个asmx处理页面)取得服务器端的数据,然后
    前台页面的listview通过:
    <bindings>
    <bindingdataPath="Name"property="text"/>
    </bindings>
    这种方式绑定取回的数据,这样就达到了异步的效果。
    所以我想可不可以让listview绑定一个客户端的数据源,这个数据源就是通过jquery从服务器端取回的json格式数据(把json
    数据格式手动的转化成listview支持的格式,比如datatable,dataset)。
    2009年5月21日 15:58
  • 服务器端可以直接将listview的绑定结果传回来就可以了

    也可以是ajax方式
    【孟子E章】
    2009年5月21日 22:25
    版主
  • 谢谢!那样的话性能会降低的。
    放弃使用listview了,用个jquery插件算了。
    2009年5月22日 6:08