Thomas Bandt

Über mich | Kontakt | Archiv

[ASP.NET 2.0] Databinding: Binden "verschachtelter" Eigenschaften

Da bin ich gerade drüber gestolpert, und ich halte es für erwähnenswert, weil es eine wirklich nette Sache ist: hat man in einem Objekt als Eigenschaft ein weiteres "echtes" Objekt, also nicht nur einen einen der üblichen Verdächtigen vom Typ String o.ä. so kann man die Eigenschaft auch ohne Weiteres mit ASP.NET 2.0 binden.

Beispiel:

Es gibt ein Objekt "BlogEntry", was sowohl zwei "normale" Eigenschaften besitzt, aber auch noch ein vollwertiges Objekt "Article".

public class BlogEntry
{

   private Article article;
   public Article Article
   {
      get { return article; }
      set { article = value; }
   }

   private Guid categoryID;
   public Guid CategoryID
   {
      get { return categoryID; }
      set { categoryID = value; }
   }

   private string url;
   public string Url
   {
      get { return url; }
      set { url = value; }
   }

}

Bindet man das jetzt z.B. in einer Liste an einen Repeater:

List entries = EasyBase.Customer.DAL.BlogEntries.GetMostActiveTopics(3);
ListMostActiveTopics.DataSource = entries;
ListMostActiveTopics.DataBind();

Dann kann man beim Binden im Markup ganz bequem auf die jeweiligen Eigenschaften der Eigenschaft Article zugreifen:


   "server"
NavigateUrl='<%# Eval("Url") %>'><%# Eval("Article.Headline")%>

Funzt. Nice to know.

P.s.: An alle Nörgler und Besserwisser: wenn Scott in 2006 über SqlInjection schreiben darf, dann gönnt mir auch diese Pipifax-Erwähnungen. Thanks in advance.

Kommentare

  1. El Gringo schrieb am Mittwoch, 8. November 2006 13:21:00 Uhr:

    Prinzipiel eine nette Idee und wahrlich kein Pipifax. Daran krankt imho das ganze Microsoft ASP.NET Model. Es ist zu unflexibel sobald man wirklich mit einem "echte" Objektmodel arbeiten muss. Doch nun zu deinem Beitrag.

    Wie sieht es aus, sollte das Unterobjekt noch nicht initialisiert sein? Man müsste doch eigentlich eine Exception wegen nicht existierender Objektinstanz bekommen, oder täusche ich mich da.

    Aber in einem Gridview oder Detailview funkioniert das leider nicht. Hier könnte man sich mit
    <%# ((BlogEntry)(Container.DataItem)).Article.Headline %>
    zwar weiterhelfen, aber früher oder später scheitert man hier auch am o.g. Problem.

    Die letzte Frage ist, wie sieht es mit einem 2-Wege Bindig aus? Hast du das schon ausprobiert?

    Viele Grüße

    eg
  2. El Gringo schrieb am Mittwoch, 8. November 2006 13:31:00 Uhr:

    Kommando zurück. Es geht auch im Detailview und der Felher mit Objektinstanz kommt auch nicht ;). Mea Culpa!

    Dennoch das 2-Way Databindig würde mich noch interessieren.

    eg


« Zurück  |  Weiter »