0

У меня есть следующий MVC3 модель:MVC3 DropDownList Code First

public class Dine 
{ 
    [Key] 
    [Display(Name = "Table Number")] 
    public string TableNumber { get; set; } 

    public List<SelectListItem> TableSelections { get; set; } 


    [Display(Name = "Table Date")] 
    [Required(ErrorMessage = "Please enter a date")] 
    public DateTime Date { get; set; } 

} 

}

элементы списка значения, определенные в контроллере и DropDownList отображается штрафом в представлении только при Представлять нажатие на сохранить значение в базе данных. Я получаю следующую ошибку:

Кто-нибудь знает, как исправить эту проблему?

Он основан на этом учебнике http://codeoverload.wordpress.com/2011/05/22/dropdown-lists-in-mvc-3/

Благодарности

EDIT Я следовал предложения от ниже, и получить эту ошибку: Не удается преобразовать тип «System.Collections.Generic.List» к «системе. Web.Mvc.SelectList»

Это то, что у меня есть, на мой взгляд:

<td>@Html.DropDownListFor(model => model.TableSelection, (SelectList)ViewBag.Tables)</td> 

Это то, что у меня есть в моей модели

public class Dine 
{ 
    [Key] 
    [Display(Name = "Table No")] 
    public int TableNo { get; set; } 

    public string TableOption { get; set; } 

    [Display(Name = "Table Date")] 
    [Required(ErrorMessage = "Please enter a date")] 
    public DateTime Date { get; set; } 
} 
} 

Это мой контроллер:

public class RestaurantController : Controller 
{ 
    TheDatabaseEntities db = new TheDatabaseEntities(); 
    // 
    // GET: /Dine/ 

    public ActionResult Index() 
    { 
     ViewBag.Tables = GetTableOptions(); 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Index(Restaurant model) 
    { 
     if (ModelState.IsValid) 
     { 

      return RedirectToAction("AddBookingComplete"); 
     } 
     ViewBag.Tables = GetTableOptions(); 

     return View(model); 
    } 
    public ActionResult BookingComplete() 
    { 
     return View(); 
    } 

    private List<Restaurant> GetTableOptions() 
    { 
     List<Restaurant> Tables = new List<Restaurant>(); 
     Table.Add(new Dine() { TableNumber = 1, TableSelection = "Table 1" }); 
     Table.Add(new Dine() { TableNumber = 2, TableOSelection = "Table" }); 
     Table.Add(new Dine() { TableNumber = 3, TableSelection = "Table" }); 
     Tables.Add(new Dine() { TableNumber = 4, TableSelection = "Table" }); 

     return Table; 
     } 
} 
} 

Любая помощь appriciated как я очень новый MVC3 Спасибо!

ответ

0

Нет, у вас нет модели MVC3. У вас есть модель Entity Framework, которую вы пытаетесь использовать в качестве модели MVC3. Это не тонкое различие.

Вы добавляете список избранного в свою модель Entity Framework, поэтому Entity Framework пытается сериализовать его в базе данных. Не делай этого. Используйте модели сущностей для данных, используйте модели просмотра для MVC.

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

Если вы настаиваете на использовании своей модели EF в своем представлении (несмотря на то, что, как утверждают лучшие практики, не делайте этого), вам необходимо передать свой SelectList через ViewData (или ViewBag), а не в вашу модель.

+0

Спасибо за ответ, как мне сделать это в режиме просмотра? извините, что я очень новичок в MVC – user1302054

+0

@ user1302054 - вы этого не делаете.Это точка –

0

Mystere Man is right. Я собираюсь угадать, что вам нужно сохранить выбранное значение из выпадающего списка в базу данных. Если да, то изменить свойство TableOption что-то вроде этого:

public string TableOption { get; set; } 

Тогда в вашем контроллере передать объект SelectList на ваш взгляд, используя ViewBag, как Mystery сказал:

ViewBag.Tables = yourList; 

А с вашей точки зрения использования а выпадающий помощник для заполнения выбора и привязки к модели:

@Html.DropDownListFor(model => model.TableOption, new SelectList(ViewBag.Tables, "TableNo","TableOption")) 

Наконец, сохраните свою модель в своем методе post action.

+0

хорошо спасибо вам обоим за помощь, предположим, я сделал это таким образом http://codeoverload.wordpress.com/2011/05/22/dropdown-lists-in-mvc-3/, используя viewmodel, затем как сохранить значения в базе данных? Обычно я делаю это так: if (ModelState.IsValid) {db.Order.Add (заказ); db.SaveChanges(); } – user1302054

+0

Вы можете использовать свою модель EF в качестве модели View. На самом деле это одно из преимуществ кодового подхода. То, что вы делаете неправильно здесь, - это попытаться поместить список SelectListItem в вашу организацию (класс ресторана). Это интерпретируется EF так, как если бы у вас были отношения «Один-ко-многим» между таблицей «Ресторан» и «Таблица SelectListItem» (и у вас нет таблицы SelectListItem). Итак, если вы хотите использовать свою модель EF в качестве модели просмотра, вы должны сделать то, что я предлагаю в ответ. – fcaldera

+0

Спасибо за помощь до сих пор, я выполнил ваше предложение, но получаю следующее сообщение об ошибке: Невозможно преобразовать тип 'System.Collections.Generic.List' в 'System.Web.Mvc.SelectList', я также обновил этот вопрос до показать мой текущий статус работы. Вы знаете, почему эта ошибка происходит? – user1302054

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