Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用'EditorFor()时接收到的数据类型不匹配`_C#_Asp.net Mvc_Razor_Asp.net Mvc 5.2 - Fatal编程技术网

C# 调用'EditorFor()时接收到的数据类型不匹配`

C# 调用'EditorFor()时接收到的数据类型不匹配`,c#,asp.net-mvc,razor,asp.net-mvc-5.2,C#,Asp.net Mvc,Razor,Asp.net Mvc 5.2,当我从*.cshtml视图调用@Html.EditorFor()时,我收到错误: 传入字典的模型项的类型为“System.Boolean”,但此字典需要“MyType”类型的模型项 这就是说,我相信我通过了一个正确类型的模型。我的代码如下所示: Html.EditorFor(m => m.MyType, Model.MyType.Template, Model.MyType.Field) MyType是绑定到每个myEditorTemplate页面的模型。模板属性的值对应于编辑模板页面的

当我从
*.cshtml
视图调用
@Html.EditorFor()
时,我收到错误:

传入字典的模型项的类型为“System.Boolean”,但此字典需要“MyType”类型的模型项

这就是说,我相信我通过了一个正确类型的模型。我的代码如下所示:

Html.EditorFor(m => m.MyType, Model.MyType.Template, Model.MyType.Field)
MyType
是绑定到每个my
EditorTemplate
页面的模型。
模板
属性的值对应于
编辑模板
页面的名称,而
字段
属性的值映射到htmlField name(两个返回字符串)


基于错误,我希望
Model.MyType
返回的是
Boolean
值,而不是
MyType
值,但我已确认情况并非如此。我甚至可以写出
@Model.MyType.GetType()
,查看它是否正确地检索
MyType
实例。

它是不直观的,但是如果templateName的值没有映射到
EditorTemplates
目录中的文件名,就会抛出此错误。例如,如果
Model.MyType.Template
返回字符串
MyTemplate
,但没有相应的
~/Views/Controller/EditorTemplates/MyTemplate.cshtml

在这个特殊的例子中,有一个错误的
Model.MyType.Template
值,它没有正确映射到任何
EditorTemplates


我想,
DisplayFor()

也会发生类似的错误,这是不直观的,但是如果templateName的值没有映射到
EditorTemplates
目录中的文件名,就会抛出此错误。例如,如果
Model.MyType.Template
返回字符串
MyTemplate
,但没有相应的
~/Views/Controller/EditorTemplates/MyTemplate.cshtml

在这个特殊的例子中,有一个错误的
Model.MyType.Template
值,它没有正确映射到任何
EditorTemplates


我想类似的错误也会发生在
DisplayFor()

只需命名模板
~/Views/Controller/EditorTemplates/MyType.cshtml
来匹配模型,然后它只需
@Html.EditorFor(m=>m.MyType)
@StephenMuecke:是的,这正是这段代码的工作原理。问题是,如果
m.MyType
值与模板不匹配(在本例中,由于伪值),则它将抛出非直观的类型不匹配异常。问题解决了,但我把它贴在这里,希望它能帮助其他人;否则,如果给出错误消息,很容易错误识别源。@StephenMuecke:我还应该注意,在我的例子中很难隔离,因为
templateName
值是动态设置的,因此掩盖了伪值。(在我的实际应用程序中,这是一个循环的一部分,其中大多数值是正确的,但有一个不正确。)我的意思是,你不需要
模板
字段
id的属性,你只需遵循正常的命名约定,将模板命名为与类相同的名称。@StephenMuecke:啊,是的,我现在明白你的意思了。在我的实际代码中,它有点复杂,因为我在模板和类之间有一个1:n的关系,因此
Template
属性。但你是正确的;如果没有这个要求,你的方法会更加优雅。只需将模板命名为
~/Views/Controller/EditorTemplates/MyType.cshtml
,以匹配模型,然后将其命名为
@Html.EditorFor(m=>m.MyType)
@StephenMuecke:是的,这正是这段代码的工作原理。问题是,如果
m.MyType
值与模板不匹配(在本例中,由于伪值),则它将抛出非直观的类型不匹配异常。问题解决了,但我把它贴在这里,希望它能帮助其他人;否则,如果给出错误消息,很容易错误识别源。@StephenMuecke:我还应该注意,在我的例子中很难隔离,因为
templateName
值是动态设置的,因此掩盖了伪值。(在我的实际应用程序中,这是一个循环的一部分,其中大多数值是正确的,但有一个不正确。)我的意思是,你不需要
模板
字段
id的属性,你只需遵循正常的命名约定,将模板命名为与类相同的名称。@StephenMuecke:啊,是的,我现在明白你的意思了。在我的实际代码中,它有点复杂,因为我在模板和类之间有一个1:n的关系,因此
Template
属性。但你是正确的;如果没有这一要求,您的方法将更加优雅。