简体   繁体   中英

The model item passed into the dictionary is of type …, but this dictionary requires …

The whole Error Message:

The model item passed into the dictionary is of type
'MyClass`2[Implementation1,Implementation2]', 
but this dictionary requires a model item of type 
'MyClass`2[Interface1,Interface2]'.

In my View, I have the model declaration:

@model MyClass<Interface1, Interface2>

Where MyClass is a Class and Interface1 and Interface2 are interfaces

on my Controller Action I am calling:

return View(model);

where: model is of type...

MyClass<Implementation1,Implementation2>

...and Implementation1 implements Interface1 and Implementation2 implements Interface2

Is there any way to avoid this error, without having to declare my model as below?

@model MyClass<Implementation1, Implementation2>

Because MyClass is invariant you can not do this, that means MyClass<Implementation1, Implementation2> is not MyClass<Interface1, Interface2> , hence the error.

As it's not an interface or a delegate, the class cannot to be declared as covariant . Although you can create an interface and make it covariant using out keyword :

public interface IMyClass<out T1, out T2>
{
    ...
}

public class MyClass<T1, T2> : IMyClass<T1, T2>
{
    ...
}

The model declaration in the View:

@model IMyClass<Interface1, Interface2>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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