В ASP.NET MVC я сталкиваюсь с ошибкой неверного типа при отображении страницы с правильным типизированным объектом - PullRequest
6 голосов
/ 07 октября 2008

Я занимаюсь разработкой приложения с использованием MVC Preview 5. Я использовал типизированные представления.

После установки debug = "false" я обнаружил, что получаю ошибки вида:

"Элемент модели передан в словарь имеет тип 'blah.Models.UserAdmin.IndexData', но этот словарь требует элемента модели типа "Blah.Models.OrganisationAdmin.IndexData».

Я не получаю эти ошибки, когда включена отладка.

Похоже, что инфраструктура MVC кэширует представления по имени представления. Если у меня есть два действия, использующих представления с одинаковыми именами (хотя и в разных пространствах имен), я нахожу, что успешным является только первое действие, второе всегда приводит к этой ошибке.

Например, у меня есть UserAdminController и OrganisationAdminController.

  • Оба имеют действие «Индекс».

  • Оба используют представление с именем «Index.aspx» (каждое содержится в папке представления контроллера; Views / UserAdmin / Index.aspx и Views / OrganisationAdmin.Index.aspx).

  • Оба представления типизированы и используют модели с именами IndexData (blah.Models.UserAdmin.IndexData и blah.Models.OrganisationAdmin.IndexData)

Если я вначале захожу в OrganisationAdmin / Index, я обнаруживаю, что любая последующая попытка просмотреть UserAdmin / Index приводит к появлению сообщения об ошибке, показанного выше.

И наоборот, если я вначале захожу на UserAdmin / Index (после перезапуска приложения), я обнаруживаю, что переход к OrganisationAdmin / Index вызывает эквивалентную ошибку (с типами наоборот).

Я переименовал одно из своих представлений в «UserAdminIndex.aspx», и это, похоже, решило проблему. Тем не менее, это не значит, что это должно быть проблемой. Конечно, инфраструктура MVC поддерживает одноименные представления? Я что-то упустил?

Любая помощь с благодарностью получена.

Sandy

Обратите внимание, я видел вопрос "В ASP.NET MVC я сталкиваюсь с ошибкой неверного типа при отображении пользовательского элемента управления с правильным типизированным объектом". У меня похожая проблема, но я не использую RenderUserControl ().

Трассировка стека:

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

Ответы [ 3 ]

2 голосов
/ 14 июля 2014

Эта ошибка сводила меня с ума. Модель была указана в верхней части моего обзора. И все же, черт возьми, просил другую модель.

Оказалось, что в том, что стало страницей макета, была потерянная ссылка ModelType. На мой взгляд, на него ссылались как на Layout = "~ / Views / _layout.vbhtml"

1 голос
/ 26 августа 2009

Я думаю, что ваш usercontrol и view имеют одно и то же имя.

1 голос
/ 07 октября 2008

Да, ошибка сообщается. Лучше оставьте отладку включенной, либо измените код ошибки (извините, не могу вспомнить, где).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...