gpt4 book ai didi

c# - 传入字典的模型项是 'MyType' 类型的,但是这个字典需要一个 'MyType' 类型的模型项

转载 作者:行者123 更新时间:2023-11-30 18:03:57 24 4
gpt4 key购买 nike

是的,我已经完成了标题相似的问题。它们似乎都不符合我所处的情况。这只是程序员向 View 发送了错误的对象类型。

这是我收到的确切错误消息:

The model item passed into the dictionary is of type 'IS.Extensions.Models.ContactSelectList', but this dictionary requires a model item of type 'IS.Extensions.Models.ContactSelectList'.

我开始在我们的解决方案中移动 View 和模型类,试图使其“类似于框架”。我的意思是,我们拥有的一些 View /模型在多个 MVC 应用程序中使用,而一些 View /模型特定于某个 MVC 应用程序。
该问题在移动 ContactSelectList View 后出现。
公共(public) View 位于使用 Razor generator 的项目中编译它们。

我的观点是:

@model IS.Extensions.Models.ContactSelectList

在调试时,我可以看到我发送到 RenderPartial 方法的模型属于同一类型: enter image description here

一些旁注:

  • IS 是一个 MVC 网络应用并引用了 IS.Extensions
  • IS.Extensions是IS引用的类库
  • ContactSelectList.cshtml 位于 IS\Views\Controls
  • ContactSelectList.cs 模型类位于 IS.Extensions\Models
  • “父 View ”(触发此 RenderPartial 调用的 View 位于“公共(public)”项目中:ZModel.Web\Views\Controls

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

在 Erics 评论后编辑:

动态加载包含模型类 (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,使一切都像以前一样工作。

关于c# - 传入字典的模型项是 'MyType' 类型的,但是这个字典需要一个 'MyType' 类型的模型项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6665987/

24 4 0