2016-11-04 3 views
0

Brauchen Sie einfach einen anderen Satz von Augen. Fehler:MVC DropDownListFor Problem mit Schlüssel

The ViewData item that has the key 'BrandId' is of type 'System.Int32' 
but must be of type IEnumerable<SelectListItem>. 

HTML

@Html.DropDownListFor(x => x.BrandId, Model.BrandForDropDown, "- Brand -") 

-Controller

model.BrandForDropDown = Repository.GetBrandsForDropDown(); 

public SelectList GetBrandsForDropDown() 
    { 
     if (Membership.GetUser() != null) 
     { 
      return new SelectList((from store in DataContext.Stores 
          join userstore in DataContext.UserStores on store.StoreId equals userstore.StoreId 
          join brand in DataContext.Brands on store.BrandID equals brand.BrandID 
          where userstore.UserId == userId 
          select new SelectListItem 
          { 
           Value = brand.BrandID.ToString(), 
           Text = brand.BrandName 
          }).OrderBy(x => x.Text)); 
     } 

     return new SelectList(new List<Brand>()); 
    } 

Modell

public int BrandId { get; set; } 
public SelectList BrandForDropDown { get; set; } 
..others omitted 

Ich habe auch versucht, List<SelectListItem> auch in dem Modell und der Ansicht, etc, gleichen Fehler

+0

Ist dieser Fehler nach dem Post zurück, wo Sie die gleiche Ansicht zurückgeben? – Izzy

+0

@Izzy nein dies ist erste Ansicht laden –

+0

Die gleiche Fehlermeldung kann auch auftreten, wenn Ihre 'SelectList' keine Daten hat – Izzy

Antwort

1

Ihr Code hat ein Problem. Sie müssen beim Erstellen der Auswahlliste dataValueField und dataTextField angeben. Das müssen Sie entweder in der Servermethode oder in der Ansicht tun. Diese

ist, wie Sie das tun

in Ihrer Methode
select new SelectListItem 
         { 
         Value = brand.BrandID.ToString(), 
         Text = brand.BrandName 
         }).OrderBy(x => x.Text),"Value","Text"); 

Eine weitere Möglichkeit, die Art der Immobilie zu List<SelectListItem> einfach zu ändern und aktualisieren Sie Ihre Methode, diese Art zurückzukehren.

public int BrandId { get; set; } 
public List<SelectListItem> BrandForDropDown { get; set; } 

Stellen Sie sicher, dass die gleiche Art zurück, wenn Ihr, wenn die Bedingung

public List<SelectListItem>GetBrandsForDropDown() 
{ 
    if(Membership.GetUser() != null) 
    { 
    // your existing code 
       select new SelectListItem 
       { 
         Value = brand.BrandID.ToString(), 
         Text = brand.BrandName 
       }).OrderBy(x => x.Text)); 
    } 
    return new List<SelectListItem(); 
} 

versagt Dies ist mein Trick

1

Bitte folgen sollte funktionieren.

-Controller

ViewBag.BrandForDropDown = Repository.GetBrandsForDropDown(); 

HTML

@Html.DropDownListFor(x => x.BrandId, ViewBag.BrandForDropDown as 
List<SelectListItem>, "- Brand -") 

Dank.

Verwandte Themen