我在这里看了很多类似的问题,但没有人能够解决我们的问题或解释为什么会这样。
我们从现有数据库创建了一个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进入流程的地方我们完全被困住了。感谢任何帮助。
答案 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)