2014-09-26 3 views
0

У меня была эта ошибка уже более суток, и я действительно не могу ее исправить. Я знаю, что в этой теме есть много вопросов, которые я прочитал снова и снова, и до сих пор не решил проблему. Я просто изучаю MVC 4, поэтому я очень смущен. Я получаю сообщение об ошибке:MVC 4 Добавить ошибку

Элемент ViewData, имеющий ключ «CabinCrewId», имеет тип «System.Int32», но должен иметь тип «IEnumerable».

Любая помощь или направление были бы очень признательны!

Мой контроллер:

public ActionResult AddCrew() 
    { 
     FlightCabinCrew fcc = new FlightCabinCrew(); 
     return View(fcc); 
    } 

Сообщение Действие:

[HttpPost] 
    public ActionResult AddCrew(FlightCabinCrew fcc) 
    { 
     if (ModelState.IsValid) 
     { 
      using (A1Context db = new A1Context()) 
      { 
       var data = from person in db.person 
          from flightcrew in db.flightcabincrew 
          from cabincrew in db.cabincrew 
          where flightcrew.cabinCrewId == cabincrew.person 
          where cabincrew.person == person.id 
          select person.name; 

       ViewBag.list = new SelectList(data.ToList(), "id", "name"); 

       db.flightcabincrew.Add(fcc); 
       db.SaveChanges(); 

       return RedirectToAction("Index"); 
      } 
     } 
     else 
     { 
      using (A1Context db = new A1Context()) 
      { 
       var data = from person in db.person 
          from flightcrew in db.flightcabincrew 
          from cabincrew in db.cabincrew 
          where flightcrew.cabinCrewId == cabincrew.person 
          where cabincrew.person == person.id 
          select person.name; 

       ViewBag.list = new SelectList(data.ToList(), "name", "name"); 
       return View(fcc); 
      } 
     } 
    } 
} 

И мой вид:

<div class="editor-label"> 
     @Html.LabelFor(model => model.cabinCrewId) 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownListFor(model => model.cabinCrewId, (SelectList)ViewBag.list) 
     @Html.ValidationMessageFor(model => model.cabinCrewId) 
    </div> 

Благодаря

Я знаю, что нужно назначить SelectList к ViewBag в GET AddCre w (как это было сделано в методе POST). но я точно знаю, что это метод GET и что я в него вложил.

В соответствии с поручением здесь человек класс

[Table("person")] 
public class Person 
{ 
    [Key, Column(Order = 1)] 
    public int id { get; set; } 
    public string name { get; set; } 

} 
+0

Можете ли вы добавить код класса 'person'? – ekad

+0

@ekad здесь – user398239

+0

Возможный дубликат [MVC 4 drop down box error] (http://stackoverflow.com/questions/26005982/mvc-4-drop-down-box-error) – Leo

ответ

0

Что этот ответ говорит, что у вас есть два контроллера. Тот, который обрабатывает запросы http get ...

public ActionResult AddCrew(){...} 

и еще один, который обрабатывает запрос http post ...

[HttpPost] 
public ActionResult AddCrew(FlightCabinCrew fcc){...} 

тогда вы рендеринга тот же вид для обоих методов контроллера. Эта точка зрения вы рендеринг ожидает ViewBag объекта для того, чтобы иметь возможность отображения элементов в списке ... здесь ...

@Html.DropDownListFor(model => model.cabinCrewId, (SelectList)ViewBag.list) 

вы успешно устанавливающее ViewBag объекта в методе действия контроллеров, который обрабатывает пост запросы ...

ViewBag.list = new SelectList(data.ToList(), "id", "name"); 

но вы должны сделать то же самое в способе действия контроллера, который обрабатывает запрос GET, а ... вот что говорит этот ответ. Метод действия контроллера GET является первым в вашем исходном вопросе

Смежные вопросы