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

时间:2009-12-24 03:39:14

标签: c# asp.net-mvc

嘿,我有一个包含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”的数据库模型是相同的。

编辑:

DB Schema:

表项目

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>

3 个答案:

答案 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。