Ich versuche, mein Projekt auf MVC3 zu aktualisieren, was ich einfach nicht finden kann:
Ich habe einen einfachen Datentyp von ENUMS:
public enum States()
{
AL,AK,AZ,...WY
}
Was ich als DropDown / SelectList in meiner Ansicht eines Modells verwenden möchte, das diesen Datentyp enthält:
public class FormModel()
{
public States State {get; set;}
}
Ziemlich einfach: Wenn ich die automatisch generierte Ansicht für diese Teilklasse verwende, wird dieser Typ ignoriert.
Ich benötige eine einfache Auswahlliste, die den Wert der Aufzählung als ausgewähltes Element festlegt, wenn ich auf Senden und Verarbeiten über meine AJAX-JSON-POST-Methode drücke.
Und als die Aussicht (???!):
<div class="editor-field">
@Html.DropDownListFor(model => model.State, model => model.States)
</div>
Vielen Dank im Voraus für den Rat!
c#
asp.net-mvc-3
razor
jordan.baucke
quelle
quelle
Antworten:
Ich habe gerade eine für mein eigenes Projekt gemacht. Der folgende Code ist Teil meiner Hilfsklasse. Ich hoffe, dass ich alle erforderlichen Methoden erhalten habe. Schreiben Sie einen Kommentar, wenn es nicht funktioniert, und ich werde es erneut überprüfen.
Verwenden Sie es als:
Aktualisieren
Ich habe alternative HTML-Helfer erstellt. Alles, was Sie tun müssen, um sie zu verwenden, ist, Ihre Basisansichtseite in zu ändern
views\web.config
.Mit ihnen können Sie einfach tun:
Weitere Informationen hier: http://blog.gauffin.org/2011/10/first-draft-of-my-alternative-html-helpers/
quelle
using System.Web.Mvc.Html;
wie Sie benötigen, um auf dieSelectExtensionsClass
((int)item).ToString()
fürEnum.GetName(enumType, item)
die erhaltenSelectListItem
korrekt gespeichert , wie ausgewählt, aber es funktioniert immer noch nicht)Ich habe hier eine einfachere Lösung gefunden: http://coding-in.net/asp-net-mvc-3-method-extension/
Eine Linie im Rasiermesser wird es tun:
Code dazu finden Sie auch im verlinkten Artikel.
quelle
@Html.DropDownListFor(model => model.State, new SelectList(Enum.GetValues(typeof(MyNamespace.Enums.States)),model.State))
Ab ASP.NET MVC 5.1 (RC1) ,
EnumDropDownListFor
wird standardmäßig als eine Erweiterung des Verfahrens enthaltenHtmlHelper
.quelle
Wenn Sie etwas wirklich Einfaches möchten, gibt es einen anderen Weg, je nachdem, wie Sie den Status in der Datenbank speichern.
Wenn Sie eine Entität wie diese hatten:
Dann wäre das Generieren des Dropdowns so einfach:
Ist LINQ nicht hübsch?
quelle
Ich konnte dies in einem Einzeiler tun.
quelle
Basierend auf der akzeptierten Antwort von @jgauffin habe ich meine eigene Version von erstellt
EnumDropDownListFor
, die sich mit dem Problem der Auswahl von Elementen befasst.Das Problem wird in einer anderen SO-Antwort hier detailliert beschrieben : und ist im Wesentlichen auf ein Missverständnis des Verhaltens der verschiedenen Überlastungen von zurückzuführen
DropDownList
.Mein vollständiger Code (der Überladungen für
htmlAttributes
usw. enthält) lautet:Ich habe das hier in meinem Blog geschrieben .
quelle
Dies wäre hilfreich für die Auswahl eines int-Werts aus enum: Hier
SpecType
ist einint
Feld ... undenmSpecType
einenum
.quelle
Ich habe die SelectList-Methode wie folgt geändert, damit sie für mich etwas besser funktioniert. Vielleicht ist es für andere nützlich.
quelle
quelle
Gleich wie bei Mike (der zwischen langen Antworten vergraben ist)
model.truckimagelocation ist eine Klasseninstanzeigenschaft des Aufzählungstyps TruckImageLocation
quelle
Dies ist der allgemeinste Code, der für alle Enums verwendet wird.
View.cshtml
quelle
Sie können enum in Ihrem Modell verwenden
deine Aufzählung
mach ein Modell
im Hinblick auf
quelle
Die einfachste Antwort in MVC5 lautet "Enum definieren":
In Ansicht binden:
quelle