Ich entwickle eine asp.net mvc Lösung mit durandal / breeze.
Ich habe eine Dropdown-Liste, in der die Liste von einem Enum ausgefüllt wird, das von Entity Framework Code zuerst bereitgestellt wird. Hier ist die Modellserverseite:
%Vor%Hier ist die Tabelle, die diese Aufzählung verwendet:
%Vor%Meine Frage: Wie kann ich diese Werte auf der Seite des Enum-Servers abrufen, um meine Dropdown-Client-Seite füllen zu können? Muss ich ein neues Array manuell clientseitig wie folgt erstellen:
%Vor%Meine Ansicht zeigt dieses Dropdown wie folgt an:
%Vor%Es scheint mir überflüssig zu sein, eine Liste von Werten clientseitig neu zu erstellen, da wir diese Liste von Werten bereits serverseitig haben.
Irgendeine Idee?
Danke.
Als Workaround können Sie in der Zwischenzeit globale "enums" aus Ihren Metadaten erstellen:
%Vor%Wenn Sie also eine Aufzählung namens "Status" hätten, hätten Sie jetzt ein globales Objekt, das Sie aufrufen können:
%Vor%Diese können dann auch an Dropdowns gebunden werden
Sie haben Recht, es ist überflüssig, die Enum-Definition auf dem Client für eine auf dem Server definierte Enumeration wiederholen zu müssen. Im Idealfall sollten die Brise-Metadaten die einzelnen Enum-Werte enthalten, aus denen ein Enum-Typ besteht.
Leider sind wir noch nicht dort angekommen. Aber das ist eine sehr vernünftige Funktion. Könnten Sie es bitte zur Breeze User Voice hinzufügen? Wir nehmen diese Vorschläge sehr ernst, um zu bestimmen, an welchen Funktionen als nächstes gearbeitet wird.
Hier ist eine Option, die Sie in Betracht ziehen können, obwohl sie Breeze überhaupt nicht verwendet :-(, Ich habe noch keine Brise angenommen, also bin ich mir nicht sicher, wie sie uns hier helfen kann.
In diesem Beispiel wird ein Standard-WebAPI-Controller verwendet, um eine Liste von Zeitzonen in eine Dropdown-Liste auf einem Knockout-VM zu laden.
Der Controller:
%Vor%Die Ausgabe vom Controller (Entschuldigung für die Formatierung, aber es ist im Grunde Id, Name-Paare, ähnlich wie Ihre Kategorien-Liste):
[{Id: "Datumszeilen-Standardzeit", Anzeigename: "(UTC-12: 00) Internationale Datumsgrenze West "}, {Id:" UTC-11 ", DisplayName: "(UTC-11: 00) Koordinierte Universal Time-11"}, {Id: "Hawaiian Standardzeit ", Anzeigename:" (UTC-10: 00) Hawaii "}, {Id:" Alaskan Standardzeit ", Anzeigename:" (UTC-09: 00) Alaska "}, {Id:" Pacific Standardzeit (Mexiko) ", Anzeigename:" (UTC-08: 00) Baja California "}, {Id: "Pacific Standard Time", Anzeigename: "(UTC-08: 00) Pacific Time (USA und Kanada) "}, {Id:" US Mountain Standard Time ", Anzeigename: "(UTC-07: 00) Arizona"}, .... usw.
Snippet aus dem Ansichtsmodell:
%Vor%Die Ansicht:
%Vor%Dies gibt mir ein Dropdown auf meinem Formular, das mit Objekten vom Server ausgefüllt wird.
Wenn Sie einige der Konzepte aus den SPA-Kursen von @JohnPapa verwenden, können Sie eine Aktion auf Ihrem Breeze Controller nicht wie folgt anzeigen:
%Vor%* BEARBEITEN: Realisiert Ich hatte GetValues (die die int-Werte zurückgeben) anstatt GetNames
Dann in Ihrem Viewmodel (oder einem Datenkontext-Service):
%Vor%Tags und Links knockout.js durandal breeze