Я пытаюсь разработать приложение в MVC 3, используя EF codefirst. Когда я использую свойства int и соглашение для установки отношений внешнего ключа, например,
public class Patient
{
public int ConsultantId {get;set;}
}
Затем я настраиваю страницу создания и редактирования и использую помощник HTML.DropDownListFor для создания списка возможных консультантов
@Html.DropDownListFor(model => model.ConsultantId, ((IEnumerable<Web.Models.Consultant>)ViewBag.PossibleConsultants).Select(option
=> new SelectListItem
{
Text = Html.DisplayTextFor(_ => option.ConsultantName).ToString(),
Value
= option.ConsultantId.ToString(),
Selected = (Model != null) && (option.ConsultantId
== Model.ConsultantId)
}), "Choose...")
Что отлично работает, но теперь я хочу перейти к наличию объекта «Консультант» в классе пациента, например,
public class Patient
{
public virtual Consultant Consultant {get;set;}
}
public class Consultant {
public virtual ICollection<Patient> Patient {get;set;}
}
Я сейчас пытаюсь настроить представление, используя DropDownListfor, но на этот раз для модели. Консультант, например,
@Html.DropDownListFor(model => model.Consultant, ((IEnumerable<Web.Models.Consultant>)ViewBag.PossibleConsultants).Select(option
=> new SelectListItem
{
Text = Html.DisplayTextFor(_ => option.ConsultantName).ToString(),
Value
= option.ConsultantId.ToString(),
Selected = (Model != null) && (option.ConsultantId
== Model.Consultant.ConsultantId)
}), "Choose...")
Страница создания и редактирования загружается правильно, и консультант правильно выбирается на странице редактирования, но когда я публикую страницу, ModelState имеет недействительное значение при этой ошибке "Не удается преобразовать
'System.String' для ввода 'Web.Models.Consultant ". Кто-нибудь знает, как использовать DropDownListFor, чтобы модель можно было сопоставить обратно с объектом.