ASP.NET:使用jQuery绑定Repeater?

时间:2009-06-11 21:03:54

标签: asp.net jquery databound-controls

我有一个Repeater控件,我绑定服务器端。它重复了一系列div,并且没有问题。我有一些按钮可用于对转发器进行排序(最新,排名最高,随机),并且按照应有的方式工作。

我希望通过使用Ajax / jQuery以某种方式对div进行排序来改善我的用户体验,这样就不会有页面回发,并且用户不会丢失他/她在页面上的位置。

有没有办法使用jQuery来访问这样的服务器端代码,还是使用Ajax重新绑定服务器端控件?

谢谢......如果我需要列出更多详情,请告诉我们!

编辑我知道UpdatePanels,但如果我不需要,我宁愿不使用它们。

4 个答案:

答案 0 :(得分:10)

您考虑过moving the Repeater's functionality to the client-side吗?

这样做,functionality like paging并且排序并不是很难添加。实际上,通过使用ADO.NET data services作为服务层,您可以非常依赖框架。

答案 1 :(得分:6)

这相对容易。

  1. 将转发器移动到单独的自定义控件,让我们说MyControl。现在,页面中的转发器变为uc1:MyControl。

  2. 将MyControl包装成div:

    <div id="mydiv">
      <uc1:MyControl ID="MyControl1" runat="server" />
    </div>
    
  3. 创建一个仅包含MyControl的新页面pgMyControl.aspx。
  4. 在主页面上,将jQuery处理程序添加到排序链接中。使用load方法动态替换div内容:

    $('#link_sort_random').click(function()
    {
      $("#mydiv").load("pgMyControl.aspx&sort=random");
    }
    
  5. 在MyControl内的数据源中使用QueryStringParameter来更改顺序。或者在代码隐藏文件中使用Request.QueryString。

答案 2 :(得分:0)

使用updatePanel或jquery Ajax回发本质上是一回事。两者都会要求您的代码获取新查询,然后使控件呈现自身,然后将HTML作为部分页面呈现返回给客户端,然后在同一DOM位置插入内容代替旧内容。

由于Web控件的性质及其确定何时呈现的生命周期,使JQuery和ASP.NET以这种方式相互通信是相当困难的。 updatePanel知道如何调用所有这些,维护正确的viewstate并将结果返回到正确的位置。

在这种情况下,不要对自己造成任何困难,使用updatePanel,除非你有一些非常具体的理由不这样做。

编辑:如果您遇到更新面板的JQuery问题,可能是因为正在创建新的DOM节点。 JQuery有live event来处理这个问题。它会注意到什么时候创建了新的DOM元素,并且即使在文档就绪后也可以将它们与选择器匹配。

答案 3 :(得分:0)

也许这是一个OT,但你可以考虑改变你绑定客户端和服务器控件的方式,使用XSLT转换而不是经典服务器控件。 你可以找到一个例子here(抱歉,这是意大利语......)。