[英]The model item passed into the dictionary is of type …, but this dictionary requires …
[英]The model item passed into the dictionary is of type 'MyType', but this dictionary requires a model item of type 'MyType'
是的,我用类似的标题回答了问题。 它们似乎都不符合我所处的情况。这只是程序员向视图发送了错误的 object 类型。
这是我收到的确切错误消息:
传入字典的 model 项的类型为“IS.Extensions.Models.ContactSelectList”,但此字典需要“IS.Extensions.Models.ContactSelectList”类型的 model 项。
我开始在我们的解决方案中移动视图和 model 类,试图使其“类似于框架”。 我的意思是,我们拥有的一些视图/模型用于多个 MVC 应用程序,而一些视图/模型特定于某个 MVC 应用程序。
该问题在移动 ContactSelectList 视图后开始。
公共视图位于使用Razor 生成器编译它们的项目中。
我认为这是:
@model IS.Extensions.Models.ContactSelectList
在调试时我可以看到我发送给 RenderPartial 方法的 model 是相同类型的:
一些旁注:
有谁知道这里发生了什么? 错误消息有点令人困惑,并没有真正的帮助..
在 Erics 评论后编辑:
动态加载包含 model class (ContactSelectList.cs) 的程序集。 为什么? 因为我认为创建一种扩展/插件系统是有意义的,在某个目录中删除某个 dll 可以扩展通用模型和一些特定于应用程序的模型。
这是如何(稍作修改):
var zExtenderAssembly = Assembly.LoadFile(path);
extenderType = zExtenderAssembly.GetTypes().ToList().Where(t => t.GetInterface("IZExtender") != null).FirstOrDefault();
return (Activator.CreateInstance(extenderType) as IZExtender).CreateBO("ContactSelectList");
ZExtender 中的“CreateBo”方法(实现 IZExtender)只是创建一个 ContactSelectList 的新实例(它与 ZExtender 在同一个库中,因此不需要反射):
public Component CreateBO(string name)
{
...
return new ContactSelectList();
...
}
我将扩展 dll 移动到 web 应用程序的 bin 目录中,并更改了 dll 的加载方式。
我曾经通过指定 .dll 文件的完整路径来加载它。 使用Assembly.Load('myAssemblyName')
加载扩展 dll ,使一切正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.