В ASP.NET MVC я сталкиваюсь с ошибкой неправильного типа при рендеринге страницы с правильным типизированным объектом.

Я разрабатываю приложение с использованием 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 поддерживает одноименные представления? Я что-то упускаю?

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

Сэнди

Обратите внимание: я видел вопрос «В 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

person sandy    schedule 07.10.2008    source источник
comment
Вы когда-нибудь находили исправление для этого? Как ни странно, несмотря на возраст вопроса, мы сталкиваемся с той же проблемой, что и описанная, но в MVC 3   -  person Alex Norcliffe    schedule 31.01.2012


Ответы (3)


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

person leppie    schedule 07.10.2008

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

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

person bendecko    schedule 14.07.2014

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

person Community    schedule 26.08.2009