MVC6 Dropdown-Liste der Länder

8

Ich versuche, MVC6-Tag-Helfer zu verwenden, um eine Dropdown-Liste von CountryCode und CountryName zu erstellen, damit ein Benutzer ihr Land nach der Registrierung auswählen kann. Der relevante Teil der Ansicht sieht soweit so aus

%Vor%

Der relevante Teil des Viewmodels sieht so aus

%Vor%

Ein Land sieht so aus

%Vor%

Der Controller gibt eine Liste der Länder an das Viewmodel zurück

%Vor%

aber in der Ansicht asp-items="@Model.Countries" hat eine verzerrte Cannot convert Country to SelectListItem

Ich kann auch nicht finden, wie in dem Formular CountryCode als die zurückzugebende Eigenschaft und CountryName als die anzuzeigende Eigenschaft angeben.

    
Vague 12.01.2016, 08:12
quelle

3 Antworten

35

Die Art und Weise, wie ich meine Dropdown-Felder einrichte, ist etwas ähnlich, außer dass in meinem ViewModel meine Eigenschaft vom Typ SelectList anstelle von IEnumerable<> ist.

%Vor%

Dann im Controller bekomme ich die Daten und wandle sie in eine anonyme Liste mit zwei Eigenschaften "Id" und "Value" um.

Im Gegenzug erstelle ich in der anonymen Liste ein neues SelectList() und gebe an, was dataValueField und was dataTextField ist.

%Vor%

Schließlich in der Ansicht:

%Vor%     
Vlince 12.01.2016, 09:58
quelle
2
%Vor%

CSHTML (MVC6)

%Vor%     
Siva Ragu 24.08.2016 07:05
quelle
1

Ich habe einen alternativen Weg vorgeschlagen, dies zu tun, indem ich SelectTagHelper um einige weitere Attribute erweitere, die diese Art der Entwicklung bequemer machen können. Das Problem wird hier besprochen.

Es basiert auf einer Klasse SelectListDescriptor , die die Liste der Elemente enthält, der Eigenschaft, die das Text- bzw. Wertfeld anzeigt. Dann in der Ansicht ein einfacher Typ

<select asp-descriptor="@ViewBag.CountryDescriptor"><option value="">-- Choose country</option<</select> .

Der Länderdeskriptor ist nur new SelectListDescriptor(nameof(Country.CountryCode), nameof(Country.CountryName), countries) . Dies vermeidet magische Strings, indem man die Macht des 'nameof-operator

nutzt     
joacar 01.12.2016 21:56
quelle