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。