2016-07-21 6 views
0

Hier ist mein ModellWie SelectListItem Ausgewählte wahr oder falsch zu machen, auf der Grundlage der Bedingung

public class NewsViewModel 
    { 
     public NewsViewModel() 
     { 

      this.Categories = new List<Category>(); 

     } 
     public int NewsId { get; set; } 
     [Required(ErrorMessage = "Please enter News Title")] 
     public string NewsTitle { get; set; } 
     public IEnumerable<Category> Categories { get; set; } 


    } 

Ich brauche wahr zu wählenden setzen, wenn id in NewsViewModel.Categories Sammlung vorhanden

private IEnumerable<SelectListItem> GetCategories() 
{ 

    return db.Categories .Select(s=>new SelectListItem { 
     Value=s.Id.ToString(), 
     Text=s.Name, 
     Selected = model.Categories.Select(x => x.CategoryId).Contains(s.CategoryId); 

} 

Und in Ansicht:

@Html.ListBoxFor(s => s.SelectedCategoriesIds, @Model.AllCategories, new { id = "DropDownList2", multiple = "multiple", @class = "form-control" }) 
+0

Sie haben eine offene Klammer ohne eine Klammer in Ihrem zweiten Code-Snippet FYI. –

+0

Auch, was ist das Problem mit dem, was Sie jetzt haben? Erhalten Sie einen Fehler? Gibt es einfach nicht zurück, was du willst? –

+0

@ChrisH. Ich bekomme Fehler Zusätzliche Informationen: Konnte keinen konstanten Wert vom Typ 'Assignment.Category' erstellen. In diesem Kontext werden nur primitive Typen oder Aufzählungstypen unterstützt. – Lucy

Antwort

2

Siehe this question; Sie können Contains nicht mit nicht primitiven Typen verwenden (wie in diesem Fall Category). Eine andere Möglichkeit, Ihre Abfrage zu schreiben, um diese Einschränkung funktioniert wäre:

return db.Categories.Select(s=>new SelectListItem { 
    Value=s.Id.ToString(), 
    Text=s.Name, 
    Selected = model.Categories.Exists(z => z.CategoryId == s.CategoryId); 
} 

Statt die CategoryId s aus model.Categories die Auswahl und Prüfung dann, wenn s.CategoryId in dieser Liste ist, können wir, wenn es Exists() ein Element überprüfen, um zu sehen, in model.Categories für die die CategoryId ist das gleiche wie s.CategoryId.

Verwandte Themen