2012-09-21 3 views
2

Я играю с MVC4 и EF Code Сначала, и у меня возникла проблема с получением DropDownList для обновления внешнего ключа типа модели.MVC: Обновление отношения FK от SelectList

Вот мои модели:

public class Customer 
{ 
    public int CustomerID { get; set; } 

    public string FirstName { get; set; } 
    public string LastName { get; set; } 

} 

public class Party 
{ 
    public int PartyID { get; set; } 

    public virtual Customer Host { get; set; } 
    public string Location { get; set; } 
    public DateTime Date { get; set; } 
} 

Так Сторона имеет Host, которая является Customer

В контроллере для метода /Party/Create GET, я передаю список клиентов в ViewBag :

ViewBag.Customers = new SelectList(db.Customers, "CustomerID", "FirstName");

И тогда в представлении Я рендеринга это как DropDownList:

@Html.DropDownListFor(model => model.Host, ViewBag.Customers as SelectList, String.Empty)

Это все работает отлично, я могу выбрать из списка клиентов в раскрывающемся списке. Однако, когда я отправляю форму, метод/Party/Create POST не вставляет данные, потому что ModelState недействителен. Глядя на ModelState, я могу видеть, что CustomerID выбранного Клиентом присутствует, но он не в состоянии быть преобразован из строки в объект типа Customer

Что я пропустил?

ответ

2

Постарайся связывания DropDownList с CustomerID имущества Host:

@Html.DropDownListFor(
    model => model.Host.CustomerID, 
    ViewBag.Customers as SelectList, 
    String.Empty 
) 
+0

Удивительный, что отсортирован проблему с 'ModelState' будучи инвалидом, спасибо! Теперь у меня есть несколько другая проблема, а именно то, что она вставляет новый «Клиент» вместо того, чтобы просто добавлять отношения FK к существующему, даже если идентификатор совпадает с существующим клиентом. В любом случае, спасибо за вашу помощь! –

+0

Просто для того, чтобы следить за этим, я решил проблему вставки, явно добавив свойство CustomerID и украсив его как внешний ключ для свойства навигации «Host». –

+0

Только у той же проблемы. Кажется немного раздражающим, что вам нужно украсить режим с помощью внешних клавиш, но, о, хорошо! – Sergio

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