繁体   English   中英

传入字典的 model 项的类型为“MyType”,但此字典需要“MyType”类型的 model 项

[英]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 是相同类型的:在此处输入图像描述

一些旁注:

  • IS 是 MVC web 应用程序并引用 IS.Extensions
  • IS.Extensions 是 IS 引用的 class 库
  • ContactSelectList.cshtml 位于 IS\Views\Controls
  • ContactSelectList.cs model class 位于 IS.Extensions\Models
  • “父视图”(触发此 RenderPartial 调用的视图位于“通用”项目中:ZModel.Web\Views\Controls

有谁知道这里发生了什么? 错误消息有点令人困惑,并没有真正的帮助..

在 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.

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