2016-09-29 8 views
-1

Ich habe drei Dropdownliste für den Bearbeitungsmodus, ich bin in der Lage, den richtigen Text in DDLFor zu füllen, aber die ID davon wird als 0 auf reichen, aber wenn ich ein anderes Team auswählen es kommt mit korrekter ID auf. Es folgt mein CodeDropdownliste für ausgewählten Text und Wert ASP.NET MVC

Ansichtsmodell

public List<SelectListItem> TeamOneList { get; set; } 
public string SelectedTeamOne { get; set; } 
.... //remaining properties for DDL's.......... 

-Controller

List<SelectListItem> TeamOneList = new List<SelectListItem>(); 
foreach (var item in db.Teams) 
{ 
    TeamOneList.Add(new SelectListItem { Text = item.TeamName, Value = item.TeamId.ToString() }); 
} 
string SelectedTeamOne = db.Teams.Where(o => o.TeamId == fixture.TeamOneId).Select(s => s.TeamName).Single(); 

Ansicht

@Html.DropDownListFor(model => model.TeamOneId, Model.TeamOneList, Model.SelectedTeamOne, new { @class = "form-control" }) 
+0

Der dritte Parameter von 'DropDownListFor()' ist das Etikett ('null' Option). Es muss etwas sein wie '' -Bitte wählen- ''(nicht' Model.SelectedTeamOne') –

+0

Zweitens ist Ihre Bindung an die 'TeamName' -Eigenschaft, aber die Option Werte sind für die' TeamId' -Eigenschaft. Es muss 'sein.Wählen (s => s.TeamId)' (und da 'TeamId' scheint' int' zu sein, dann 'SelectedTeamOne' sollte auch' int' sein, nicht 'string' –

+0

Im Bearbeitungsmodus muss ich bevölkern, was auch immer aufgeführt ist Stephen – user3543878

Antwort

1

Sie die Option value Attribut zu erzeugen basierend auf der TeamId Eigenschaft Team, aber Ihre Einstellung der SelectedTeamOne Wert basiert auf der TeamName Namenseigenschaft, so dass der Wert von SelectedTeamOne keiner der Optionen entspricht, daher wird die erste Option (die null Beschriftungsoption) ausgewählt (weil etwas sein muss).

Aber Sie Erzeugen der null Label-Option mit dem gleichen Text wie SelectedTeamOne so scheint es, Ihr es sind die Auswahl, wenn in der Tat nur Ihr die Möglichkeit, mit einem null Wert Auswahl (es gibt tatsächlich eine zweite Option mit dem gleichen Namen in der Dropdownlist).

Ihre Notwendigkeit, den Code in der Ansicht

@Html.DropDownListFor(model => model.SelectedTeamOne, Model.TeamOneList, "-Please select-", new { @class = "form-control" }) 

und dann den Controller-Code

SelectedTeamOne = db.Teams.Where(o => o.TeamId == fixture.TeamOneId).Select(s => s.TeamId).Single(); 

Hinweis

ändern zu ändern, dass es scheint TeamId typeof int ist daher Ihre SelectedTeamOne Eigenschaft sollte auch be int, nicht string

public int SelectedTeamOne { get; set; } 

Darüber hinaus können Sie einfach

var model = new yourModelName 
{ 
    TeamOneList = db.Teams.Select(x => new SelectListItem> 
    { 
     Value = x.TeamId.ToString(), 
     Text = x.TeamName 
    }), 
    SelectedTeamOne = fixture.TeamOneId // no need to make a database call 
}; 
return View(model); 

oder, noch einfacher

var model = new yourModelName 
{ 
    TeamOneList = new Selectist(db.Teams, "TeamId", "TeamName"), 
    SelectedTeamOne = fixture.TeamOneId // no need to make a database call 
}; 
return View(model); 
+0

Danke Stephen, statt "-Bitte auswählen- "Option wie kann ich den tatsächlichen Wert in DDLFor für den Benutzer zu entscheiden, ob er diesen Wert durch die Auswahl der verfügbaren Optionen in DDLFor – user3543878

+0

ich verstehe nicht verstehen, was Sie meinen. Wenn (sagen wir) den Wert von' fixture.TeamOneId 'ist' 5' dann 'SelectedTeamOne' ist auch 5' und wenn Sie eine Zeile in' Teams' mit 'TeamId = 5' haben, wird diese Option beim Generieren der Ansicht ausgewählt. Wenn Sie nicht' null wollen 'Labor el Option, verwenden Sie dann '@ Html.DropDownListFor (Modell => Modell.TeamOneId, Modell.TeamOneList, neu {@class = "form-control"}) ', das die Label-Option nicht erzeugt. –

+0

Aber es ist nicht wirklich klar, warum Sie haben 'SelectedTeamOne = db.Teams.Where (o => o.TeamId == fixture.TeamOneId) .Wählen (s => s.TeamId) .Single();' - Sie können nur Verwenden Sie 'SelectedTeamOne =' fixture.TeamOneId', anstatt einen sinnlosen zusätzlichen Datenbankaufruf zu machen (und ich werde die Antwort so bearbeiten) –

Verwandte Themen