El elemento de modelo que se pasa al diccionario es del tipo ‘mvc.Models.ModelA’, pero este diccionario requiere un elemento de modelo de tipo ‘mvc.Models.ModelB’

Tengo este error molesto en algunas de mis comstackciones.

No hay ningún error en el proyecto, porque si construyo nuevamente, entonces el problema desaparece. El mensaje solo aparece cuando el sitio se implementa en un servidor de Windows 2008.

Primero pensé que podría ser un problema con los archivos temporales, pero ese no es el caso. Implementé la comstackción en una web diferente y el error aún aparece.

El error aparece en acciones aleatorias del sitio. La mayoría de las comstackciones de tiempo son correctas, pero cada tercera o cuarta comstackción produce errores de tiempo de ejecución.

Construyo utilizando un WebdeploymentProject en modo de lanzamiento. Las vistas están precomstackdas.

No es en ASP.NET MVC encuentro un error de tipo incorrecto al representar una página con el objeto tipeado correcto , porque las vistas tienen nombres totalmente diferentes.

¿Cómo puedo solucionar este problema o cómo puedo obtener ayuda para esto?

Aquí está mi WebDeploymentProject

   Debug AnyCPU 9.0.21022 2.0 {E5E14CEB-0BCD-4203-9A5A-34ABA9C717EA} ..\B2CWeb {3E632DB6-6DB3-4BD0-8CCA-12DE67165B48}|B2CWeb\B2CWeb.csproj /B2CWeb.csproj v3.5   true .\Debug false true B2CWeb_Build   false ..\B2CWeb_Deploy\ false true B2C_Web   false     <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.WebDeployment.targets.         -->  

EDITAR

Después de algunos meses, este problema desapareció. No he tenido problemas por más de 1 año ahora. Supongo que el problema volverá a atacar cuando nadie lo espera.

EDIT 2

… desde hace más de 2 años. ¡Soy un tipo tan afortunado!

EDIT 3

Acabo de leer un artículo en MSDN , y parece ser el problema que tuve. Tengo la depuración desactivada, pero aun así la comstackción fue “a veces incorrecta”. El comportamiento del proveedor anterior podría ser el problema. Pero esto es solo adivinar.

Las páginas muy grandes que contienen tramos largos de HTML sin bloques de servidor (por ejemplo, ) pueden provocar un desbordamiento de la stack cuando la comstackción de depuración está habilitada y la aplicación se bloqueará. Tenga en cuenta que en nuestras pruebas se ha tomado una página que es ~ 4x tan grande que habría producido un problema similar en el proveedor anterior, pero en este caso, bloquea la aplicación completa, mientras que con el proveedor anterior simplemente falla la página ofensiva.

Incluso si los tipos coinciden, puede obtener este error cuando se pasa un valor nulo a una vista parcial.

Puede solucionar esto llamando a RenderPartial con un RenderPartial vacío como este:

 helper.RenderPartial("~/Views/Player/PlayerName.ascx", player, new ViewDataDictionary()); 

Como referencia, encontré esta solución en:
renderpartial con modelo nulo pasa el tipo incorrecto

ASP.NET MVC Parciales

¡Modelo NULL fue aprobado!

 @Html.Partial("PartialView", model: Model) 

Este error puede ocurrir (y lo hace) cuando hay una falta de coincidencia entre los datos que el método de acción del controlador está suministrando a la vista y el tipo de datos que espera la vista. Esto normalmente no aparecerá como un error de comstackción, incluso con vistas precomstackdas.

Por ejemplo, si tengo un método …

 public ActionResult Create() { // Do something return View(new CustomerCreateViewModel()); } 

… y una vista Crear con un atributo de página …

 <%@ Page ... Inherits="System.Web.Mvc.ViewPage" %> 

… esto comstackrá y comstackrá sin error. Sin embargo, cuando llamo a la acción Crear, voy a obtener una pantalla amarilla, porque el método de acción Crear arroja datos de un tipo y la vista está esperando datos de un tipo diferente. Es posible que desee verificar que sus tipos coincidan …

¿Estás absolutamente seguro de que esto no tiene nada que ver con los datos que se pasan a la vista? ¿Estás realizando una reconstrucción completa cada vez?

Estos errores suelen producirse porque una vista parcial intenta usar el modelo de vista que se pasa a la página de visualización cuando el modelo de vista que se pasa a la vista parcial es nulo. Me doy cuenta de que está dando a entender que el error está causado de alguna manera por el proceso de comstackción, pero no veo cómo eso sea posible. ¿Podría ser que el sitio implementado use una base de datos diferente que el sitio que ejecuta en su máquina de desarrollo, y podrían los datos (o la falta de datos) en esa base de datos ser la causa del problema?

¿La construcción activa cualquier advertencia o error?

¿Tiene sus dependencias configuradas correctamente? P.ej. vistas dependiendo de los modelos. Construya las cifras en qué orden para comstackr cosas mirando las dependencias especificadas. P.ej. si cambia un modelo y la vista se comstack antes del modelo, se mete en problemas …

¿Desaparecerá esto si no comstacks vistas?

¿ System.Web.Mvc.ViewPage vistas también heredan System.Web.Mvc.ViewPage o System.Web.Mvc.ViewPage donde T es su modelo?

Antes de asignar el modelo al control de usuario desde su vista, cree una instancia de ese objeto particular en el constructor del Modelo / Entidad.

Ejemplo:

  public class MainEntity { public SubEntity AssociatedEntity; public MainEntity() { // This is where the instantiation happen. AssociatedEntity = new SubEntity(); } } public class SubEntity { public string property1; } 

Su página de vista:

 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> .... <%Html.RenderPartial("ucMyUserControl",Model.AssociatedEntity); .... 

Su control de usuario:

 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> .... <%Html.TextBoxFor(m=>m.Property1); 

Si tiene una carpeta de vistas anuladora, donde existen parciales múltiples del mismo nombre (uno que reemplaza a otro con el mismo nombre), asegúrese de actualizar el tipo de modelo en cada vista o puede recibir este error.

Tuve el siguiente mensaje de error

El elemento del modelo que se pasa al diccionario es del tipo ‘System.Linq.Enumerable + WhereSelectListIterator2 [MyProject.Models.A, MyProject.Models.B]’, pero este diccionario requiere un elemento de modelo del tipo ‘System.Collections.Generic.List1 [MyProject.Models.B] ‘.

con el siguiente código

 IEnumerable list_B; ... IEnumerable list_A = Repo.GetListOfType_A(); list_B = list_A.Select(x => new B { Number = x.Number, Name = x.Name }); ... return View(list_B); 

y no tengo idea de cual era el tipo

System.Linq.Enumerable + WhereSelectListIterator2 [MyProject.Models.A, MyProject.Models.B]

de todos modos, el error desaparece cuando agrego un .ToList() al final

 IEnumerable list_B; ... IEnumerablelist_A = Repo.GetListOfType_A(); list_B = list_A.Select(x => new B { Number = x.Number, Name = x.Name }).ToList(); // here ... return View(list_B); 

Espero que ayude a alguien más

Para mí, esto fue causado por un error tonto de cortar y pegar en mi contexto. Estaba obteniendo este error en mi índice de contacto.

  public DbSet Customer { get; set; } public DbSet Contact { get; set; } // Note this ^^^^^^^^ should have been Contact 

Se compiló bien, pero me dio el error al tratar de representar la vista.

(Agregar esto como algo más para las personas futuras que buscan soluciones para probar).