嘿,我有一个包含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后):
<p>
<label for="Status">Status:</label>
<%= Html.DropDownList("StatusID")%>
<%= Html.ValidationMessage("StatusID", "*")%>
</p>
<p>
<label for="Types">Type:</label>
<%= Html.DropDownList("Types")%>
<%= Html.ValidationMessage("Types", "*")%>
</p>
答案 0 :(得分:5)
这是黑暗中的一个镜头:在您的视图中,您已经为状态选择列表提供了“状态”ID,当您发布一组表单数据时,会导致默认表单集映射尝试转换列表的选定值(这是int StatusID的字符串版本)到ConstructionProject.Models.Status 对象中,但失败了。尝试使用“StatusID”作为选择列表的ID,看看是否有效。
要获得更好的答案,您还应该发布视图标记的相关部分。
答案 1 :(得分:1)
如果视图中有多个表单,请确保使用BeginForm方法的正确重载显式设置表单的“action”属性。那就是:
@using (Html.BeginForm("ACTION_METHOD", "CONTROLLER", FormMethod.Post, null))
而不是这一个:
@using (Html.BeginForm())
答案 2 :(得分:0)
我认为您的错误可能是由于您的代码中某处有“状态”而不是“StatusId”。请注意,错误表明它正在尝试转换为Status,而不是StatusId。
我在我的一个项目中碰到了这个。如果您正在使用Entity Framework,并且您的对象具有外键,则EF也将为您创建对外部对象的引用(如果我没有准确描述,请原谅我)。键入“MyObject”时。在代码中,Intellisense将为您提供Status和StatusId。
就我而言,我使用了DropDownListFor()和model.PersonType而不是model.PersonTypeId。