2010-12-17 75 views
1

我正在尋找一個簡單的輕量級ASP.NET服務器控件來呈現2列,一個標籤和一個單選按鈕列表。它應該看起來像這樣。我應該使用哪一個ASP.NET服務器控件?

Gender  Male/Female 
Recommend us Yes/No 
and so on.. 

我覺得中繼器或數據網是一個矯枉過正,因爲這個網頁需要高性能的頁面,應該很輕。

你推薦什麼服務器控制?

+0

此列表可以根據數據庫(或其他配置)進行更改,還是硬編碼? – Greg 2010-12-17 16:09:11

+0

列表不能被硬編碼。它基於數據庫。 – DotnetDude 2010-12-17 21:26:13

回答

0

請定義高性能和「非常輕」。如果通過「非常輕」來表示呈現的HTML標記,那麼Repeater控件是最好的選擇,因爲您完全控制了標記。如果你的意思是服務器端處理,你可能想寫一個自定義控件。

但是,如果您可以使用輸出緩存,則在初始加載之後,服務器端上中繼器的收益可以忽略不計。


我用兩行的例子測試了一個純HTML解決方案與中繼器解決方案。
控制(空白頁): 693字節呈現給客戶端,0.22毫秒
純HTML溶液: 1029字節呈現給客戶端時,服務器處理時間:0.26毫秒
中繼器解決方案:渲染 2196字節客戶端,服務器處理時間:0.47毫秒(大部分開銷是由於使用RadioButtonList控件)

你說的是1 kb的未壓縮和0.21毫秒的開銷使用中繼器和單選按鈕列表。

作爲交換,你要保持這樣的:

<table> 
    <tbody> 
     <asp:Repeater ID="r" runat="server"> 
      <ItemTemplate> 
       <tr> 
        <td> 
         <asp:Literal ID="l" runat="server" EnableViewState="false" Text='<%# Eval("Label") %>' /> 
        </td> 
        <td> 
         <asp:RadioButtonList ID="rbl" runat="server" EnableViewState="false" 
         DataSource='<%# ((Option)Container.DataItem).RadioButtonLabels %>' 
          RepeatDirection="Horizontal" RepeatLayout="Flow"> 
         </asp:RadioButtonList> 
        </td> 
       </tr> 
      </ItemTemplate> 
     </asp:Repeater> 
    </tbody> 
</table> 

,而不是這樣的:

StringBuilder sb = new StringBuilder(); 

sb.Append("<table><tbody>"); 

foreach (Option option in options) 
{ 
    sb.AppendFormat("<tr><td>{0}</td><td>", option.Label); 

    foreach (string label in option.RadioButtonLabels) 
    { 
     sb.AppendFormat("{0}<input type=\"radio\" name=\"{1}\" value=\"{0}\" />", label, option.Label); 
    } 

    sb.Append("</td></tr>"); 
} 

sb.Append("</tbody></table>"); 

個人而言,我更喜歡第一種選擇,但你可能傾向於第二種。

+0

我有15-20這些在這個頁面上,它加起來很快。雖然我也傾向於第一種選擇,但我想知道是否有辦法縮小尺寸和縮短處理時間。我看到你沒有關閉中繼器級別的視圖狀態。有什麼理由呢? – DotnetDude 2010-12-17 21:23:30

+0

不,不是。只是一個疏忽。如果關閉viewstate,則必須綁定每個Page_Init,只是如此。我想你可以看到一個合理的收益,如果你避免RadioButtonList呈現一些非常大的標記。直放站本身是精益。 – Greg 2010-12-17 21:27:34

+0

我花了30分鐘寫這篇文章並測試它,一個4字的答案獲得更多的選票,然後我的。 :sad: – Greg 2010-12-18 20:13:56

0

作爲網頁用戶控件的聲音對您最有效,因爲您可以將「頭頂」控制在最低限度。

乾杯, 斯特凡

1

我覺得,一箇中繼器或一個DataGrid 是矯枉過正,因爲這頁需要 高高性能頁,應該是 很輕。

我建議純html。

+0

我需要的單選按鈕是一個服務器控件 – DotnetDude 2010-12-17 15:36:43

+0

你可以做你想要的通過HTML和JavaScript。

​​性別​​男中女性 ...你可以得到用戶的選擇像這樣Request.Form [「gender」] – 2010-12-17 15:59:44

1

聞起來就像微調優化給我的。在你的頁面上放置一箇中繼器或數據網格,對於你上面指定的內容,將會在你的頁面上完全沒有延遲 - 這是不必要的,但它不會引起問題。這是除非你是從一個2400波特調制解調器服務你的網站,我懷疑你是。

您尚未指定此控件是否將在多個頁面上重複使用。如果不是這樣,那麼通過將其設置爲Web控件,可能會給應用程序增加不必要的複雜性。如果你打算做的只是顯示靜態內容,就像上面顯示的一樣,只要保持簡單並像上面顯示的那樣顯示字段 - 在兩列表中,標籤在一個表中,單選按鈕在另一個。

如果您打算重新使用該控件,我的投票仍然像通常添加控件一樣添加控件 - 而不使用中繼器或數據網格。