繁体   English   中英

传递到词典中的模型项的类型为'System.Guid',但是此词典需要模型类型为'System.String'的模型项

[英]The model item passed into the dictionary is of type 'System.Guid', but this dictionary requires a model item of type 'System.String'

我在这里浏览了许多类似的问题,但没有一个能够解决我们的问题或解释为什么可能会发生这种情况。

我们从现有数据库创建了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的编辑器。 我们完全迷住了字符串进入进程的位置。 感谢任何帮助。

我经常使用ASP.NET动态数据,因此我期望MVC脚手架中每种基本类型都已经有一个编辑器。 没有,并且尝试进行隐式转换。 如果失败,通常会引发此错误。

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

如果我们想要一个特定于GUID的编辑器,我们将不得不创建自己的编辑器。 无论如何,我们最终只会得到一个文本框,所以这就是第一个解决方案最简单的原因。

这也发生在我身上。 对我来说,问题是我创建了自定义Editfor模板,但没有包含System.Guid模板。 由于它可以找到一个与system.Guid相匹配的文件,因此它将尝试使用System。 字符串因此产生该错误。

如果是这种情况,请在EditorTemplates文件夹中添加一个名为Guid的cshtml,然后添加以下内容:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM