涉及的技术:
案例
为了更清楚,我们以Stackoverflow Users list
为例。该列表可以在客户端进行操作。我可以搜索,翻页等等。显然我们需要调用jQuery.ajax来检索给定搜索的每个页面的HTML。好的。现在这给我留下了第一个问题:
在服务器端为jQuery.ajax呈现响应的最佳方法是什么?我不能使用我想的模板,所以我认为最明显的解决方案是将HTML标签创建为服务器控件并将其作为ASHX请求的结果呈现?这是最好的方法吗?
尼斯。这解决了我们还有另一个问题:
当用户第一次进入
Authors List
时,第一个列表页面应该已经从服务器完全呈现好了吗?当然我们可以渲染第一页以及ajax调用,但我不认为它更好。这次我可以使用模板来呈现列表,但是这个模板在案例1中无法重用。我该怎么办?
现在最后一个问题:
现在我们有2种渲染策略:1)客户端和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更新作者列表的内容,以用于后续请求,例如搜索,过滤,分页等。