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