最佳实践:如何实现类似于Stackoverflow用户列表的列表?

时间:2010-04-07 01:03:01

标签: c# .net asp.net ajax webforms

涉及的技术

  1. ASP.NET Web表单
  2. Javascript(例如jQuery)
  3. 案例

    为了更清楚,我们以Stackoverflow Users list为例。该列表可以在客户端进行操作。我可以搜索,翻页等等。显然我们需要调用jQuery.ajax来检索给定搜索的每个页面的HTML。好的。现在这给我留下了第一个问题:

      

    在服务器端为jQuery.ajax呈现响应的最佳方法是什么?我不能使用我想的模板,所以我认为最明显的解决方案是将HTML标签创建为服务器控件并将其作为ASHX请求的结果呈现?这是最好的方法吗?

    尼斯。这解决了我们还有另一个问题:

      

    当用户第一次进入Authors List时,第一个列表页面应该已经从服务器完全呈现好了吗?当然我们可以渲染第一页以及ajax调用,但我不认为它更好。这次我可以使用模板来呈现列表,但是这个模板在案例1中无法重用。我该怎么办?

    现在最后一个问题:

      

    现在我们有2种渲染策略:1)客户端和2)服务器。如何重复使用2个渲染的代码?

    解决这些问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

如果要在服务器上创建html标记,则重用非常简单。在任何一种情况下,您都要将html控件添加到父控件,因此您只需创建一个可从两个页面获取的方法,该方法将父控件作为参数并从CreateChildControls调用它。

如果要将json数据发送到客户端,请仅在开发期间使用客户端呈现(在onload中使用ajax调用)。然后,一旦视图不会发生太大变化,您可以根据需要添加服务器端版本。在大多数情况下,应该可以在jquery和.net中使用的样式编写代码,这样您就可以从一个复制到另一个而无需太多更改。

答案 1 :(得分:1)

我会创建一个名为“AuthorList.ascx”的用户控件,它以正确的格式(即使用HTML)输出作者列表,作为片段。 (没有HEAD / HTML / BODY标签,只是通常使用ASCX控件的直接碎片类型。

然后我按照正常情况制作我的作者列表页面,删除我刚刚在div中创建的这个新控件:

<div id="author-list"><uc1:authorList runat="server" id="userList1" /></div>

对于案例2来说已经足够了。

要添加ajax更新,我会创建一个新页面,其中只包含AuthorList.ascx控件:

<%@ Page ... %>
<%@ Register ... %>
<uc1:authorList runat="server" id="userList1" />

使用jQuery我会这样做:

$('#author-list').load('path-to-the-second-aspx-page-containing-user-contor.aspx', {
    // args here
});

允许您通过AJAX更新作者列表的内容,以用于后续请求,例如搜索,过滤,分页等。