2

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

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

有没有办法像这样使用 jQuery 访问服务器端代码,或者使用 Ajax 重新绑定服务器端控件?

谢谢...如果我需要列出更多详细信息,请告诉我!

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

4

4 回答 4

10

您是否考虑过将中继器的功能移至客户端

这样做,分页和排序等功能并不难添加。事实上,通过使用ADO.NET 数据服务作为服务层,您可以非常依赖该框架。

于 2009-06-12T00:00:01.547 回答
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。
于 2009-06-11T23:48:48.420 回答
0

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

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

在这种情况下,不要让自己变得更难,使用 updatePanel 除非你有一些非常具体的理由不这样做。

编辑:如果您在更新面板方面遇到 JQuery 问题,可能是由于创建了新的 DOM 节点。JQuery 有现场事件来处理这个。它会注意到新的 DOM 元素何时被创建,并在文档准备好之后将它们与您的选择器进行匹配。

于 2009-06-11T21:23:36.053 回答
0

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

于 2009-06-13T00:03:17.630 回答