Frage

Ich entschied, dass Datensätze Rückkehr, die Arbeit mit Datensatz und Datentabellen in einem vorderen Ende App eine ziemlich schlechte Idee. So mit der Magie der Generika ich eine generische Liste über Webservice Aufruf kehrte zurück (nicht WCF einfach nur ol‘asmx). Das funktioniert prima, solange Sie eine Liste pro Anruf zu Ihrem Webservice zurückgeben müssen.

Das Szenario, das ich in laufen lasse, ist, dass ich einen beteiligten Bildschirm, wo es ein paar Dropdown-Listen sind und so weiter. Ich brauche diese Dropdown-Listen auf eine generische Liste zu binden. Das Problem ist, dass ich will nicht mehr Web-Anrufe tätigen, einen für jeden Drop-Down, meine Daten zu erhalten. In der Vergangenheit hätte ich wieder nur einen Datensatz und ein Dropdown auf eine bestimmte Tabelle in der Datenmenge gebunden.

So wäre es Super mehr generischen Listen in einem Web-Gespräch zurückzukehren.

Dinge, die ich habe versucht:

  1. Mit einer Liste der Listen
  2. Eine Sammlung von generischen Listen mit
  3. eine Basisklasse erstellen und eine Sammlung von List<Base> verwenden, gibt es dort Konvertierungsprobleme, wenn zu stopfen versuchen, Objekte in diesem List<Base>.
  4. Erstellen einer Klasse, die Eigenschaften hat, die List<MyOneObject> zurückkehren, List<MySecondObject>, etc. Das funktioniert, aber es ist ein bisschen chaotisch ... Ich habe viele Klassen und Bildschirme in der App, wo dies geschehen würde. Ich könnte eine Klasse wie folgt erstellen, die eine Eigenschaften von List<MyType> für jede Klasse hat, aber wie ich schon sagte, ich denke, das kann außer Kontrolle geraten.

So an diesem Punkt Ich habe zwei Optionen, # 4 in der obigen Liste oder Rückkehr nur eine Datenmenge, die ich lieber nicht tun: 0)

Hat jemand in diesem Lauf vor?

War es hilfreich?

Lösung

Nun, ich glaube nicht, mehrere Listen der Rückkehr ist eine gute Idee, aber wenn Sie es tun wollen, würde ich eine Wrapper-Klasse mit jeder Liste als eine Eigenschaft in dieser Klasse ausgesetzt erstellen.

So etwas wie

class Wrapper
{
   public List<object1> Object1List {get;set;}
   public List<object1> Object2List {get;set;}

}

Andere Tipps

Die Antwort ist # 4, über eine Klasse, entweder das oder mehrere Anrufe, die Sie lieber nicht tun

Nun scheint es, dass ich alle meine Antworten heute mit einer Frage beginnen? Warum würden Sie nicht tun wollen mehrere Anrufe hinter den Kulissen?

Wenn Sie eine asynchroner Aufruf på Drop-Down / Steuerung verwenden müssen Sie binden Sie einen flüssigeren User Experience bekommen. (Vor allem für große unabhängige Listen), nur weil, wenn Sie einen Anruf machen alle Drop-Down / conrtols benötigen für alle anderen contrls Daten warten zurückgegeben werden.

Dass gesagt wird: Wenn die Listen sind Rückkehr Sie eine nahe beieinander in der Länge youd könnte ein Wörterbuch verwenden, Taste „Eigenschaftsname“ darzustellen und um den Wert zu gut den Wert darstellen. Sehr wenig Code erfordern und Umwandeln was auch immer die Quelle zu einem Wörterbuch mit .ToDictionary ist () ist ziemlich geradlinig (wenn die Quelle nicht IEnumerable Umsetzung .ToDictionary () für diese Quelle in der Regel geradlinig)

Ihr Szenario gegeben, würde ich sagen das Ergebnis in XML Rückkehr wäre der beste Weg zu gehen. Sie könnten nur nicht so viele Listen zurück, wie man wollte, aber man kann sich in irgendeiner Weise organisieren und vor allem wäre dies eine languange unabhängige, universelle Lösung sein. Sie könnten auch die Ergebnismenge direkt in XML-Transformation.

Wenn Sie eine .NET-Klasse zurückkehren Sie .NET-Sprachen, um nur den Dienst beschränkt fordern und wenn das geändert würden Sie haben, um die Wrapper-Klassen neu zu schreiben, etc. Mit XML Sie den Service von jeder Sprache nennen könnten. Also, wenn Sie versuchen, Ihr Front-End-App von Ihrem Datum / Modell Schicht zu entkoppeln, wäre dies ein guter Weg sein zu nehmen.

Sie können deserialisieren noch die XML-Daten in einer .NET-Klasse führen, wenn Sie wollen, oder einfach nur die Daten direkt extrahieren. LINQ to XML ist schnell und einfach zu bedienen und Sie erlauben würde, das Ergebnis zu verändern, wenn es sein muss.

<result>
  <dropdownA_item>
     <Value/>
  </dropdownA_item>
  <dropdownA_item>
  <dropdownA_item>
  <dropdownB_item>
  <dropdownB_item>
  <dropdwonC_item>
  // return as many different lists for as many different drop downs
</result>

// manually extract the data or deserialize into .net class
XElement result = GetResult();
dropdownBox[x].Items = result // you could even have an array of dropDownBoxes[x] and bind to all of them in one loop
    .Where(o => o.Name == "dropdown" + x)
    .Select(o => o.Element("Value").Value) );
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top