在ASP.NET MVC我呈现页面时正确类型的对象

问题描述:

我正在开发使用MVC预览5.我已经使用类型的视图的应用遇到了不正确的错误类型。在ASP.NET MVC我呈现页面时正确类型的对象

设置调试=“假”之后,我发现我收到出错的形式:

“传递到 字典型号产品 型“blah.Models.UserAdmin的。 IndexData”但 本词典需要 类型的模型项目 ‘blah.Models.OrganisationAdmin.IndexData’”。

当调试是我不明白这些错误。

它看起来像的MVC框架缓存由视图名称的意见。如果我有使用具有相同名称的视图中的两个动作(尽管是在不同的命名空间),我发现只有首先执行的操作是成功的,第二个总是导致这个错误。

例如,我有一个UserAdminController和OrganisationAdminController。

  • 两者都有'索引'动作。

  • 两者都使用一个称为“的Index.aspx”(每个包含在控制器的视图文件夹;查看/ UserAdmin /的Index.aspx和查看/ OrganisationAdmin.Index.aspx)图。

  • 这两种观点都被键入,并利用模型称为IndexData(blah.Models.UserAdmin.IndexData和blah.Models.OrganisationAdmin.IndexData)

如果我第一次访问OrganisationAdmin /指数,我觉得任何后续尝试查看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 
+0

您是否曾经为此找到过修复程序?奇怪的是,尽管问题的年龄我们碰到了与描述完全相同的问题,但在MVC 3 – 2012-01-30 23:04:02

是的,错误的报道。最好现在就进行调试,或者修改违规代码(抱歉不能回忆起哪里)。

我认为你的用户控件和视图具有相同的名称。

这个错误让我发疯。该模型正在我看法的顶部。然而该死的东西正在请求一个不同的模型。

原来在成为布局页面的地方存在孤立的ModelType引用。它在我的视图中被引用为Layout =“〜/ Views/_layout.vbhtml”

+0

男人你值得这个答案的奖牌 – iceDragon 2017-05-10 07:43:32