ASP MVC DropDownList错误“转换为类型”

嘿,我有一个表有2个int类型的字段,它们是“StatusID”和“TypeID”。 TypeID正常工作但StatusID返回错误。 这是我的控制器的样子:

[AcceptVerbs(HttpVerbs.Post)] public ActionResult Create(Project project) { var db = new DB(); if (ModelState.IsValid) { try { db.Projects.InsertOnSubmit(project); db.SubmitChanges(); return RedirectToAction("Index"); } catch { return View(project); } } ViewData["Status"] = from c in db.Status select new SelectListItem { Text = c.Text, Value = c.StatusID.ToString() }; ViewData["Types"] = from t in db.Project_Types select new SelectListItem { Text = t.Text, Value = t.TypeID.ToString() }; return View(project); } 

我得到的错误是:

Message =“从类型’System.String’到类型’ConstructionProject.Models.Status’的参数转换失败,因为没有TypeConverter可以在这些类型之间进行转换。”

但就像我说的那样,字段“TypeID”和“StatusID”的数据库模型是相同的。

编辑:

数据库架构:

表项目

 ProjectID int TypeID int StatusID int Name varchar(50) Description text DateCreated datetime ClientID int Contractor int 

表状态

 StatusID int Text varchar(50) 

表项目类型

 TypeID int Text varchar(50) 

有人知道这会纠正这个问题吗?

我的视图页面(更改为StatusID后):

  

这是黑暗中的一个镜头:在您的视图中,您已经为状态选择列表提供了“状态”ID,当您发布一组表单数据时,会导致默认表单集合映射尝试转换所选值对于列表(这是您的int StatusID的字符串版本)到ConstructionProject.Models.Status 对象 ,该对象失败。 尝试使用“StatusID”作为选择列表的ID,看看是否有效。

要获得更好的答案,您还应该发布视图标记的相关部分。

如果视图中有多个表单,请确保使用BeginForm方法的正确重载显式设置表单的“action”属性。 那是:

 @using (Html.BeginForm("ACTION_METHOD", "CONTROLLER", FormMethod.Post, null)) 

而不是这一个:

 @using (Html.BeginForm()) 

我认为您的错误可能是由于代码中的“Status”而不是“StatusId”。 请注意,错误表明它正在尝试转换为Status,而不是StatusId。

我在我的一个项目中碰到了这个。 如果您正在使用Entity Framework,并且您的对象具有外键,则EF也将为您创建对外部对象的引用(如果我没有准确描述,请原谅我)。 当您键入“MyObject”时。 在代码中,Intellisense将为您提供Status和StatusId。

在我的例子中,我使用了DropDownListFor()和model.PersonType而不是model.PersonTypeId。