2008-10-07 11 views
6

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 
+0

¿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 –

Respuesta

1

Sí, el error se ha informado. Mejor deje la depuración por el momento, o modifique el código ofensivo (no puedo recordar dónde).

1

Creo que su usercontrol y vista tienen el mismo nombre.

2

Este error me estaba volviendo loco. El Modelo se estaba especificando en la parte superior de mi vista. Sin embargo, la maldita cosa estaba solicitando un modelo diferente.

Resulta que había una referencia huérfana ModelType en lo que se había convertido en una página de diseño. Se estaba haciendo referencia en mi opinión como Layout = "~/Views/_layout.vbhtml"

+0

hombre merece una medalla por esta respuesta – iceDragon

Cuestiones relacionadas