2009-05-03 7 views
5

Kann jemand versuchen, die beste Ursache der Aktion zu empfehlen, um die Anfrage unten zu lösen:.Net Repeater entspricht einem einzelnen Objekt?

Ich habe eine Reihe von erweiterten Klassen mit der Repeater-Klasse als Basis erstellt und lieben die Flexibilität, die Leichtigkeit und die Ergebnisse dabei . Ich möchte jetzt ein ähnliches benutzerdefiniertes Websteuerelement für ein einzelnes Objekt erstellen (d. H. Die DataSource implementiert keine IListSource oder IEnumerable). Ich habe die Struktur dessen geschaffen, was ich erreichen möchte, indem ich den Repeater erweitere und dann die Datenquelle unter Verwendung einer Liste von 1 Element, um das Objekt zu halten, und dann Datenbindung einstelle.

e.g a rough example: 

    Dim oObj as New MyObject(1) 
    Dim gl As New Generic.List(of MyObiect)() 
    gl.Add(oObj) 
    rpt.DataSource = gl 
    rpt.DataBind() 

Das um Dinge wie ein kleiner Hack scheint, was ich ist folgendes zu tun in der Lage sein würden:

e.g new call, where my control is the new custom control: 

    Dim oObj as New MyObject(1) 
    myControl.DataSource = oObj 
    myControl.DataBind() 

ich in der Lage möchte diese individuelle Steuerung mit verschiedenen Variablen definieren und Eigenschaften, die folgende Art von Layout ermöglichen das Ergebnis davon:

<My:ObjControl ID="frm" runat="server"> 
    <Tabs> 
     <My:Tab name="Details"> 
      <Items> 
       <My:Item Type="Text" Label="First Name" Property="FirstName" /> 
       <My:Item Type="Text" Label="Last Name" Property="LastName" /> 
       <My:Item Type="Text" Label="Title" Property="Title" /> 
      </Items> 
     </Tab> 
     <My:Tab name="Address"> 
      <Items> 
       <My:Item Type="Text" Label="Address 1" Property="Address1" /> 
       <My:Item Type="Text" Label="Address 2" Property="Address2" /> 
       <My:Item Type="Text" Label="Address 3" Property="Address3" /> 
      </Items> 
     </Tab> 
    </Tabs> 
</My:ObjControl> 

Diese Implementierung WebForms nehmen hat Platz verwenden, obwohl es wäre MVC wie mit dem idealen Ansatz sieht unter Berücksichtigung des oben genannten. Auf diese Weise möchte ich ein flexibles WebControl erstellen, das Reflektion verwendet (das für alle Klassen verwendet werden kann, die eine bestimmte Schnittstelle implementieren), die bei jedem Bedarf das erforderliche Formular mit nur drei Zeilen Code (oben) generiert.

Soll ich einfach eine Eigenschaft zu einem benutzerdefinierten Repeater (DataObject) hinzufügen, der ein Objekt übernimmt und die DataSource entsprechend einstellt und so Zeit spart? Oder gibt es einen besseren Weg?

Hoffe das alles macht Sinn!

Cheers, Steve

Antwort

5

Sie sind Weg zu hart versuchen, um die Tatsache zu erhalten, dass der Repeater eine Liste will, und Sie wollen es 1 Instanz geben. Wickeln Sie es einfach in eine neue List * oObj) und fahren Sie fort. Es ist die ganze Zeit fertig.

Ich weiß natürlich nicht, was sie mit diesem benutzerdefinierten Server-Steuerelement los ist. Scheint mir, du versuchst es wieder zu sehr.

<asp:repeater id="whatever" runat=server> 
    <ItemTemplate>First Name: <%# DataBinder.Eval(Container.DataItem,"FirstName") %></ItemTemplate> 
</asp:repeater> 
+0

Ok, es ist sehr schwer, über den Gedankenprozess hinwegzukommen, aber was meine Kontrolle erreichen wird, ist eine Seite mit zwei li Tabs 'Details' und 'Adresse', zwischen denen Tabs eingefügt werden können Formularelemente, die das Objekt aktualisieren können. Was Sie gezeigt haben, hat den Punkt völlig verpasst - wahrscheinlich mein Fehler in der Formulierung der Frage. Natürlich in Ihrem könnte ich einfach tun: Eval ("FirstName"). – stibstibstib

+1

Immer noch zu viel Aufwand, um so viel Arbeit für ein paar Tabs zu tun, und ich empfehle immer noch einen Repeater. Ja ich verstehe deine Frage nicht vollständig. Ich benutze nicht Eval, DataBinder.Eval ist die 1.0 Möglichkeit, es zu tun, und ich sehe keinen Grund, sich noch zu ändern, Gewohnheit. –

2

Ich verstehe Ihre Sicht, stibstibstib vollständig. Ich wünschte auch, dass das ASP.NET-Framework mit einem vorlagengesteuerten Server-Steuerelement wie ListView aber für ein einzelnes Datenobjekt geliefert wurde. Es erscheint unnötig, und fühlt sich irgendwie hakisch an, eine Liste aus einem einzigen Element zu erstellen, nur um es mit Repeater und ListView arbeiten zu lassen. Ich verstehe, dass es funktioniert. Ich verstehe, dass es eine einfache Lösung ist. Aber ASP.NET ist ein Framework und es scheint nur eine Auslassung zu sein, die behoben werden sollte. Dieser Artikel http://gadgetopia.com/post/5343 berührt das gleiche Konzept, dass es zwei grundlegende Möglichkeiten gibt, Inhalte auf einer Website anzuzeigen: als ein einzelnes Element und als ein Element in der Liste. Immer noch überrascht, ASP.NET hat nicht so etwas wie ein ItemView-Server-Steuerelement

1

In bestimmten Situationen können Sie eine DetailsView verwenden.