MVC 3 DropDownListFor和错误的值错误

Ton*_*ony 0 html.dropdownlistfor asp.net-mvc-3

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

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

     list.Add(new SelectListItem
                    {
                        Value = tableRow.ID.ToString()
                        ,
                        Text = "language"
                    }
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Dar*_*rov 5

更换:

@Html.DropDownListFor(
    model => model.Language, 
    ...
)
Run Code Online (Sandbox Code Playgroud)

有:

@Html.DropDownListFor(
    model => model.Language.LanguageID, 
    ...
)
Run Code Online (Sandbox Code Playgroud)

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

  • @Tony,编译器什么都不连接.编译器的作用是将C#代码编译成MSIL.然后你运行你的代码.您的代码恰好是ASP.NET MVC应用程序.因此,您有一个视图,它将一些数据发布到控制器操作,该操作将视图模型作为参数.因此,默认模型绑定器启动并尝试将请求值绑定到此模型. (2认同)