传递到字典中的模型项是'System.Guid'类型,但是这个字典需要一个'System.String'类型的模型项

时间:2013-11-15 12:45:37

标签: c# asp.net-mvc entity-framework entity-framework-4

我在这里看了很多类似的问题,但没有人能够解决我们的问题或解释为什么会这样。

我们从现有数据库创建了一个EDMX,并使用MVC 4脚手架为我们自动生成控制器和视图。索引页面很好,但是当我们选择要编辑的实体时,会抛出此错误。我们的解决方案中没有自定义编辑器,也不是部分页面更新。

编辑页面的控制器代码是:

public ActionResult Edit(int id = 0)
{
   MessageProfile messageprofile = db.MessageProfiles.Find(id);
   if (messageprofile == null)
   {    
      return HttpNotFound();
   }
   return View(messageprofile);
}

Edit.cshtml上的模型声明是

@model Web.UI.Areas.Admin.Models.MessageProfile

,错误发生在

@Html.EditorFor(model => model.APIKey)

EDMX将APIKey作为GUID,生成的模型类将APIKey作为模型,当我们将鼠标悬停在代码中时,EditorFor表示它是GUID的编辑器。在String进入流程的地方我们完全被困住了。感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

经常使用ASP.NET动态数据,我的期望是MVC脚手架中的每个原始类型都会有一个编辑器。没有,并且尝试进行隐式转换。当失败时,通常会抛出此错误。

在这种情况下,简单的解决方案是使用Html.TextBoxFor而不是Html.EditorFor。这是一个奇怪的案例,但价值是通过电子邮件粘贴的。在其他情况下,我们使用查找和下拉列表使表单更好。

如果我们想要一个特定于GUID的编辑器,我们将不得不创建自己的编辑器。我们最终得到的只是一个文本框,这就是为什么第一个解决方案是最简单的。

答案 1 :(得分:0)

这也发生在我身上。对我来说问题是我创建了自定义Editfor模板,而我没有为System.Guid添加一个。因为它可以找到一个匹配system.Guid它会尝试使用系统。字符串因此产生该错误。

如果您的EditorTemplates文件夹中出现这种情况,请添加名为Guid的cshtml,然后添加以下内容:

@model System.Guid
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue)