MVC 3 DropDownListFor和错误的值错误

时间:2012-01-20 18:53:42

标签: asp.net-mvc-3 html.dropdownlistfor

我在使用Razor语法的MVC 3中的代码片段有问题。在我的数据库表(MySQL)中,我有一个列(FK)LanguageID [int]。然后,在该视图中,我想将该列分配给DropDownList,其中包含我即时生成的语言列表:

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

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

然后,在View中,我将该列表连接到Language属性:

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

但是,当我将数据发布到服务器时,它返回错误结果"The value '353' is invalid.",其中353是数据库中的语言ID。我做错了什么?

编辑 在调试时,我注意到ModelState中的错误消息:"The parameter conversion from type 'System.String' to type 'FavorytaWeb.Models.BookLanguage' failed because no type converter can convert between these types."

1 个答案:

答案 0 :(得分:5)

替换:

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

使用:

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

您无法将值353绑定到model.Language所代表的复杂类型。它没有意义。您只能将其绑定到标量属性。