Estoy desarrollando una aplicación utilizando MVC Preview 5. He utilizado vistas escritas a máquina.En ASP.NET MVC encuentro un error de tipo incorrecto al representar una página con el objeto tipeado correcto
Después de establecer debug = "false", he descubierto que estoy recibiendo errores de la forma:
"El elemento de modelo pasado en el diccionario es de tipo 'blah.Models.UserAdmin. IndexData 'pero este diccionario requiere un elemento de modelo del tipo ' blah.Models.OrganisationAdmin.IndexData '".
No obtengo estos errores cuando la depuración está activada.
Parece que el marco MVC está almacenando vistas en caché por nombre de vista. Si tengo dos acciones que usan vistas con el mismo nombre (aunque en diferentes espacios de nombres), encuentro que solo la acción que se ejecuta primero es exitosa, la segunda siempre da como resultado este error.
Por ejemplo, tengo un UserAdminController y un OrganisationAdminController.
Ambos tienen una acción 'Index'.
Ambos usan una vista llamada 'Index.aspx' (cada uno contenido en la carpeta de visualización del controlador; Views/UserAdmin/Index.aspx y Views/OrganisationAdmin.Index.aspx).
Ambos puntos de vista se escriben y hacen uso de modelos llamados IndexDta (blah.Models.UserAdmin.IndexData y blah.Models.OrganisationAdmin.IndexData)
Si vuelvo a visitar OrganisationAdmin/Índice de primera, me parece que cualquier intento posterior de ver UserAdmin/Index da como resultado el mensaje de error que se muestra arriba.
Por el contrario, si visito UserAdmin/Index primero (después de reiniciar la aplicación), me parece que navegar a OrganisationAdmin/Index causa un error equivalente (con los tipos al revés).
Cambié el nombre de una de mis vistas "UserAdminIndex.aspx" y esto pareció solucionar el problema. Sin embargo, esto no parece ser un problema. ¿Seguramente el marco MVC admite vistas con un nombre similar? Me falta algo?
Cualquier ayuda recibida con gratitud.
arena
Tenga en cuenta, he visto a la pregunta "¿En ASP.NET MVC me encuentro con un error de tipo incorrecto cuando la prestación de un control de usuario con el objeto mecanografiada correcta". Estoy enfrentando un problema similar, pero no estoy usando RenderUserControl().
El seguimiento de pila:
InvalidOperationException: The model item passed into the dictionary is of type 'blah.Models.RoleAdmin.IndexData' but this dictionary requires a model item of type 'blah.Models.UserAdmin.IndexData'.]
System.Web.Mvc.ViewDataDictionary`1.SetModel(Object value) +231
System.Web.Mvc.ViewDataDictionary..ctor(ViewDataDictionary viewDataDictionary) +99
System.Web.Mvc.ViewPage`1.SetViewData(ViewDataDictionary viewData) +60
System.Web.Mvc.WebFormView.RenderViewPage(ViewContext context, ViewPage page) +64
System.Web.Mvc.WebFormView.Render(ViewContext viewContext, TextWriter writer) +85
System.Web.Mvc.ViewResult.ExecuteResult(ControllerContext context) +206
System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ActionResult actionResult) +19
System.Web.Mvc.<>c__DisplayClass12.<InvokeActionResultWithFilters>b__f() +18
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +257
System.Web.Mvc.<>c__DisplayClass14.<InvokeActionResultWithFilters>b__11() +20
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +257
System.Web.Mvc.<>c__DisplayClass14.<InvokeActionResultWithFilters>b__11() +20
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ActionResult actionResult, IList`1 filters) +188
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +386
System.Web.Mvc.Controller.ExecuteCore() +112
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +23
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7
System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) +107
System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) +39
System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +7
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
¿Alguna vez encontró una solución para esto? Extrañamente, a pesar de la edad de la pregunta, estamos alcanzando exactamente el mismo problema que el descrito, pero en MVC 3 –