2010-12-17 12 views
1

Ich bin auf der Suche nach einem einfachen leichtgewichtigen ASP.NET-Server-Steuerelement, um 2 Spalten, eine Beschriftung und eine Optionsfeldliste zu rendern. Es sollte buchstäblich so aussehen.Welches ASP.NET-Serversteuerelement soll ich verwenden?

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

Ich glaube, dass ein Repeater oder ein Datagrid ist ein Overkill, wie diese Seite hochperformant Seite sein muss und sollte sehr leicht sein.

Welche Serversteuerung empfehlen Sie?

+0

Kann sich diese Liste basierend auf der Datenbank (oder einer anderen Konfiguration) ändern oder ist sie fest codiert? – Greg

+0

Liste kann nicht fest codiert sein. Es basiert auf der Datenbank. – DotnetDude

Antwort

0

Bitte definieren Sie hohe Leistung und "sehr leicht". Wenn mit "sehr leicht" das gerenderte HTML-Markup gemeint ist, ist das Repeater-Steuerelement die beste Wahl, da Sie das Markup vollständig steuern. Wenn Sie serverseitige Verarbeitung meinen, möchten Sie wahrscheinlich ein benutzerdefiniertes Steuerelement schreiben.

Die Gewinne über den Repeater auf der Serverseite wären jedoch nach dem anfänglichen Laden vernachlässigbar, wenn Sie Output-Caching verwenden können.


Ich habe eine reine HTML-Lösung gegen eine Repeater-Lösung mit Ihrem Beispiel von zwei Zeilen getestet.
Control (leere Seite): 693 Bytes an den Client übertragen, .22 ms
reine HTML-Lösung: 1.029 Bytes Client gerendert, Server-Verarbeitungszeit: 0,26 ms
Repeater Lösung: 2196 Bytes gemacht zum Client, Server Zeit Verarbeitung: 0,47 ms (die Mehrheit der Overhead ist aufgrund einer Radiobuttonlist Kontrolle zu verwenden)

Sie sprechen über 1 kb unkomprimiert und 0,21 Millisekunden Overhead für die Verwendung des Repeaters und Radiobuttonlist.

Im Gegenzug erhalten Sie diese erhalten:

<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> 

statt dessen:

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>"); 

Persönlich bevorzuge ich die erste Option, aber Sie können die zweite bevorzugen.

+0

Ich habe 15-20 davon auf dieser Seite, die ziemlich schnell summiert. Auch wenn ich mich auf die erste Option stütze, würde ich gerne wissen, ob es eine Möglichkeit gibt, die Größe und die Bearbeitungszeit zu reduzieren. Ich sehe, dass Sie Viewstate auf Repeater-Ebene nicht ausgeschaltet haben. Irgendein Grund dafür? – DotnetDude

+0

Nein, nicht wirklich. Nur ein Versehen. Wenn Sie ViewState ausschalten, müssen Sie jedes Page_Init binden, nur damit Sie es wissen. Ich denke, Sie können einen vernünftigen Gewinn sehen, wenn Sie die RadioButtonList vermeiden, die ziemlich große Markup rendert. Der Repeater selbst ist mager. – Greg

+0

Ich verbrachte 30 Minuten damit, dies zu schreiben und es zu testen und eine 4-Wort-Antwort bekommt mehr Stimmen als meine. : traurig: – Greg

0

Sounds wie ein Web User Control würde am besten für Sie arbeiten, wie Sie in der Lage sein werden, den "Overhead" auf ein Minimum zu halten.

Cheers, Stefan

1

Ich glaube, dass ein Repeater oder ein Datagrid ist zuviel des Guten, wie diese Seite zu sein hochperformant Seite benötigt und sollte sehr leicht sein.

ich schlage rein html vor.

+0

Ich brauche den Radiobutton, um eine Serversteuerung zu sein – DotnetDude

+0

Sie können tun, was Sie wollen, durch HTML und Javascript.

... und Sie können die Auswahl des Benutzers erhalten wie diese Request.Form ["gender"] –

0

Ich mag die ListView für ihre Flexibilität.

1

Riecht wie Mikro-Optimierung für mich. Wenn Sie einen Repeater oder ein Datagrid auf Ihre Seite setzen, wird Ihre Seite absolut nicht verzögert - es ist unnötig, aber es wird kein Problem verursachen. Dies gilt nur, wenn Sie Ihre Site von einem 2400-Baud-Modem aus bedienen, was ich bezweifle.

Sie haben nicht angegeben, ob dieses Steuerelement auf mehreren Seiten wiederverwendet wird. Wenn dies nicht der Fall ist, fügen Sie Ihrer Anwendung unnötige Komplexität hinzu, indem Sie sie zu einem Web-Steuerelement machen. Wenn Sie nur statische Inhalte wie oben anzeigen möchten, halten Sie es einfach und zeigen Sie die Felder genau so an, wie Sie sie oben angezeigt haben - in einer zweispaltigen Tabelle mit einer Beschriftung in einem und Optionsfeldern in dem anderen.

Wenn Sie das Steuerelement wiederverwenden möchten, besteht meine Stimme darin, die Steuerelemente so hinzuzufügen, wie Sie normalerweise ein Steuerelement hinzufügen würden - ohne die Verwendung eines Repeaters oder Datagrids.

Geschlecht männlich Femal