MVC 3 DropDownListFor и неверное значение ошибки - PullRequest
0 голосов
/ 20 января 2012

У меня проблема с моим фрагментом кода внутри MVC 3 с синтаксисом Razor. В моей таблице БД (MySQL) есть столбец (FK) LanguageID [int]. Затем в этом представлении я хочу присвоить этому столбцу DropDownList со списком языков, который я генерирую на лету:

     List<SelectListItem> list = new List<SelectListItem>();

     list.Add(new SelectListItem
                    {
                        Value = tableRow.ID.ToString()
                        ,
                        Text = "language"
                    }

Затем в представлении я связываю этот список со свойством Language:

@Html.DropDownListFor(
                 model => model.Language, 
                 new SelectList(ViewData["LanguageList"] as List<SelectListItem>,
                "Value", "Text")
                    )

но когда я отправляю данные на сервер, они возвращаются с результатом ошибки "The value '353' is invalid.", где 353 - это идентификатор языка из БД. Что я делаю не так?

Редактировать Во время отладки я заметил сообщение об ошибке в ModelState: "The parameter conversion from type 'System.String' to type 'FavorytaWeb.Models.BookLanguage' failed because no type converter can convert between these types."

1 Ответ

5 голосов
/ 20 января 2012

Заменить:

@Html.DropDownListFor(
    model => model.Language, 
    ...
)

на:

@Html.DropDownListFor(
    model => model.Language.LanguageID, 
    ...
)

Нельзя связать значение 353 со сложным типом, который представляет собой то, что представляет model.Language.Это просто не имеет смысла.Вы можете связать его только со скалярными свойствами.

...