9 Stimmen

ASP.NET MVC 4-ViewModel mit DropDownList-Daten

Ich verwende @html.EditorFor, um mein Modell im Bearbeitungsmodus zu rendern, und ein Dropdown-Liste wird nicht gerendert.

Hier ist mein ViewModel:

     public class RiskAutoViewModel
     {
       public RiskAutoViewModel()
       {
         VehicleMakeList = new SelectList(new List() { new VehicleMake() { Id = 1, Name = "Renault" }, new VehicleMake() { Id = 2, Name = "Peugeot" } });
       }

    public int NoClaimsDegree { get; set; }

    public int VehicleValue { get; set; }

    public int EngineCapacity { get; set; }

    public int VehicleMake { get; set; }

    public SelectList VehicleMakeList { get; set; }
  }

VehicleMake wird als Textfeld gerendert und VehicleMakeList wird überhaupt nicht gerendert. Was ich gerne hätte, ist eine Dropdown-Liste mit der Liste von VehicleMake zu rendern und ihren Wert auf den von VehicleMake zu setzen.

Wenn das Modell gespeichert wird, sollte VehicleMake auf den Wert des ausgewählten Elements in der Liste gesetzt werden.

Wie kann ich das machen ?

BEARBEITEN

Da ich in den Kommentarfeldern unten keinen Code eingeben kann, schreibe ich hier eine Fortsetzung.

Ich habe schließlich ein EditorTemplate erstellt wie folgt:

    @Html.LabelFor(model => model.VehicleMakeList)

    @Html.DropDownListFor(model => model.VehicleMake, Model.VehicleMakeList)
    @Html.ValidationMessageFor(model => model.VehicleMake)

Und jetzt sieht mein ViewModel so aus:

[Erforderlich]
[ScaffoldColumn(false)]
public int VehicleMake { get; set; }

[Display(Name = "Marke", Prompt = "Marke", Description = "Geben Sie die Marke des Fahrzeugs ein")]
public SelectList VehicleMakeList { get; set; }

Dies führt mich nun zu einer anderen Frage (vielleicht sollte ich das in einem anderen Thread fragen), aber eigentlich habe ich ZWEI Dropdown-Listen in dieser Ansicht. Und die Elemente in der zweiten Dropdown-Liste sind im Grunde dynamisch und hängen vom ausgewählten Element in der ersten Dropdown-Liste ab. Das ist mit AJAX ganz einfach zu machen, aber mit MVC bin ich verloren. Wie machen das die Leute normalerweise ?

11voto

Forty-Two Punkte 7427

Leider gibt es keine integrierte Unterstützung für Dropdown-Listen im Editor für Vorlagen. Sie können entweder Ihre eigene Editor-Vorlage schreiben oder die html-Hilfsmethode @Html.DropDownListFor() in Ihrer Ansicht verwenden.

Die Antwort von Darin Dimitrov auf diese Frage kann Sie durch den Prozess des Erstellens einer Editor-Vorlage für Dropdown-Listen führen, wenn Sie das möchten.

Der schnellste Weg, dies zum Laufen zu bringen, wäre dies in Ihrer Ansicht zu tun:

@Html.EditorFor(model => model.NoClaimsDegree)
@Html.EditorFor(model => model.VehicleValue)
@Html.EditorFor(model => model.EngineCapacity)
@Html.DropDownListFor(model => model.VehicleMake, Model.VehicleMakeList, "Wählen Sie eine Marke aus")

10voto

JOBG Punkte 4444

Ich denke, das Modell für die Dropdown-Liste sollte sein:

public List VehicleMakeList {get; set;}

Und initialisiert wie:

VehicleMakeList = new List() 
{ 
   new SelectListItem { Value = "1", Text = "Renault" }, 
   new SelectListItem { Value = "2", Text = "Peugeot" } 
};

Oder unter Verwendung einer Datenquelle:

    VehicleMakeList = db.VehicleMakers /*EF, LINQ2SQL, ADO.NET oder jede unterstützte externe Quelle*/
       .Select(v=> new SelectListItem { Text = v.Name, Value = v.Id})
       .ToList();

Ansicht:

@Html.DropDownListFor(model => model.VehicleMake, Model.VehicleMakeList)

3voto

dnxit Punkte 6682

Das Binden einer Dropdownliste ist in MVC sehr knifflig. Sie können dies in Ihrem Controller mit folgendem tun: Holen Sie alle Ihre Städte-Liste und legen Sie sie in ViewBag ab

Erstellen

      ViewBag.CityId = new SelectList(db.Cities, "ID", "Name");

user.CityID, wenn Sie im Bearbeitungsmodus sind, damit beim Bearbeiten die Stadt ausgewählt wird

      ViewBag.CityId = new SelectList(db.Cities, "ID", "Name", user.CityID);

In Ihrer Ansicht machen Sie einfach diesen Trick

     @Html.DropDownList("CityId", "Auswählen")

Dies ist der einfachste Weg, den ich kenne....

0voto

Mou Punkte 14697

Auswählen einer Dropdown-Liste ist einfach. Der Code lautet wie folgt:

public ActionResult BindWithModel()
{
    List items = new List();

    items.Add(new SelectListItem 
                { Text = "Kategorie auswählen", Value = "0", 
                        Selected = true });
    items.Add(new SelectListItem
                { Text = "Getränke", Value = "1" });
    items.Add(new SelectListItem
                { Text = "Gewürze", Value = "2" });
    items.Add(new SelectListItem
                { Text = "Süßigkeiten", Value = "3" });
    items.Add(new SelectListItem
                { Text = "Milchprodukte", Value = "4" });
    items.Add(new SelectListItem
                { Text = "Getreide", Value = "5" });
    items.Add(new SelectListItem
                { Text = "Fleisch/Geflügel", Value = "6" });
    items.Add(new SelectListItem
                { Text = "Obst und Gemüse", Value = "7" });
    items.Add(new SelectListItem
                { Text = "Meeresfrüchte", Value = "8" });

    var model = new CategoryModel()
    {
        lstCategory = items,
        selected = 1
    };

    return View(model);
}

Code in der Ansicht

@model BindMvcDropdownList.Models.CategoryModel

Dropdown-Liste in MVC mit Modell verbinden

@Html.DropDownListFor(x => x.selected, Model.lstCategory)

Code hier entnommen http://dotnetmentors.com/mvc/how-to-bind-dropdownlist-in-asp-net-mvc-application.aspx

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X