2010-04-07 27 views
0

技術涉及最佳實踐:我如何實現類似於Stackoverflow的用戶列表的列表?

  1. 的ASP.NET Web表單
  2. 的Javascript(jQuery的舉例)

案例

使其更清晰,讓我們給#1 Users list舉個例子。這個列表可以在客戶端操縱。我可以搜索,頁面等等。所以顯然我們需要調用jQuery.ajax來檢索給定搜索的每個頁面的HTML。好的。現在,這給我留下了第一個問題:

在服務器端呈現jQuery.ajax響應的最佳方式是什麼?我不能使用我想的模板,所以我認爲最明顯的解決方案是將HTML標記創建爲服務器控件並將它們呈現爲ASHX請求的結果?這是最好的方法嗎?

不錯。這解決了我們另一個問題:

當用戶第一次進入Authors List第一列表頁面應該已經來自完全呈現好嗎服務器?當然,我們可以渲染第一頁以及ajax調用,但我認爲它不會更好。這次我可以使用模板來渲染列表,但是這個模板在案例1中不能被重用。我該怎麼做?

現在最後一個問題:

現在我們有2種渲染策略:1)客戶端和2)服務器。我如何重用2個渲染的代碼?

解決這些問題的最佳實踐是什麼?

回答

1

我會製作一個名爲「AuthorList.ascx」的用戶控件,它以正確的格式(即用HTML)輸出作者列表作爲片段。 (沒有HEAD/HTML/BODY標籤,就像通常的ASCX控件一樣,只是筆直的fragmet類型的東西。

然後,我會按照正常情況製作我的作者列表頁面,放棄我剛剛在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更新作者列表的內容以用於後續請求,例如搜索,過濾,分頁等。

1

如果你在服務器上創建html標籤,重用很簡單。無論哪種情況,您都要將html控件添加到父控件中,因此您只需創建一個可從兩個頁面中獲得的方法,將父控件作爲參數並從CreateChildControls中調用它。

如果您要將json數據發送到客戶端,請僅在開發期間使用客戶端呈現(在onload中使用ajax調用)。如果視圖不會發生太大變化,您可以根據需要添加服務器端版本。在大多數情況下,應該可以使用jquery和.net的風格編寫代碼,這樣您就可以從一個複製到另一個,而無需進行太多更改。