大家好,这可能很难:
我目前正在为我的MVC网站制作插件,并且我会执行以下操作:
问题是,对于没有模型的视图,它可以100%正常工作,但每当我将模型附加到模型时,主应用程序似乎无法识别模型的命名空间/类< / strong>并抛出异常:
System.InvalidOperationException:传递给的模型项 字典的类型为&#39; PluginTest.Models.ProductModel&#39;,但是这个 字典需要类型的模型项 &#39; PluginTest.Models.ProductModel&#39;
完全例外:
System.InvalidOperationException:传递给的模型项 字典的类型为&#39; PluginTest.Models.ProductModel&#39;,但是这个 字典需要类型的模型项 &#39; PluginTest.Models.ProductModel&#39 ;.在 System.Web.Mvc.ViewDataDictionary
1.SetModel(Object value) at System.Web.Mvc.ViewDataDictionary..ctor(ViewDataDictionary dictionary) at System.Web.Mvc.WebViewPage
1.SetViewData(的ViewDataDictionary viewData)at System.Web.Mvc.WebViewPage.set_ViewData(ViewDataDictionary value)at RazorGenerator.Mvc.PrecompiledMvcView.Render(ViewContext viewContext, TextWriter编写者) C:\用户\ ACertainUser \桌面\ ACertainFolder \ RazorGenerator \ RazorGenerator.Mvc \ PrecompiledMvcView.cs:行 81.在System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext 上下文) System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext,ActionResult actionResult)at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList的1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList
1 filters,Int32 filterIndex,ResultExecutingContext preContext, ControllerContext controllerContext,ActionResult actionResult)at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList
1个过滤器,ActionResult actionResult)at System.Web.Mvc.Async.AsyncControllerActionInvoker&LT;&GT; c__DisplayClass21&LT;&GT; c__DisplayClass2b.b__1c() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker&LT;&GT; c__DisplayClass21.b__1e(IAsyncResult的 asyncResult)at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase
1.End() 在 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult的 asyncResult)at System.Web.Mvc.Controller.b__1d(IAsyncResult的 asyncResult,ExecuteCoreState innerState)at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase
1.End() 在System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) 在System.Web.Mvc.Controller.b__15(IAsyncResult asyncResult,Controller controller)at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase
1.End() 在System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)at at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult的 asyncResult)at System.Web.Mvc.MvcHandler.b__5(IAsyncResult的 asyncResult,ProcessRequestState innerState)at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase
1.End() 在System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult的 结果)在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep步骤)at System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&amp; completedSynchronously)
此错误通常意味着控制器没有将正确的模型发送到视图,但在这种情况下,我认为主应用程序不知道此类型是什么。
它发生在代码的这一部分(来自RazorGenerator.Mvc):
public void Render(ViewContext viewContext, TextWriter writer)
{
WebViewPage webViewPage = _viewPageActivator.Create(viewContext.Controller.ControllerContext, _type) as WebViewPage;
if (webViewPage == null)
{
throw new InvalidOperationException("Invalid view type");
}
if (!String.IsNullOrEmpty(_masterPath))
{
_overriddenLayoutSetter.Value(webViewPage, _masterPath);
}
webViewPage.VirtualPath = _virtualPath;
webViewPage.ViewContext = viewContext;
webViewPage.ViewData = new ViewDataDictionary(viewContext.ViewData); // IT CRASHES HERE
webViewPage.InitHelpers();
WebPageRenderingBase startPage = null;
if (this.RunViewStartPages)
{
startPage = StartPage.GetStartPage(webViewPage, "_ViewStart", ViewStartFileExtensions);
}
var pageContext = new WebPageContext(viewContext.HttpContext, webViewPage, null);
webViewPage.ExecutePageHierarchy(pageContext, writer, startPage);
}
此外,当我调试此方法并查看viewContext参数时,我看到存在正确的模型数据(仅包含3个字段:id,name,cost)。这意味着ViewContext中的Model是合法的,实例化的,并且在其中具有正确的数据。它似乎不喜欢被转移到webViewPage.ViewData字典。请记住,我正在调试主应用程序,但我可以看到来自不同程序集的类。
我有什么方法可以解决这个问题,所以我可以从一个未引用的汇编中获得工作模型吗?
非常感谢!
编辑:反思可能解决这个问题吗?如何从另一个程序集导入一个类型,以便在尝试复制字典数据时WebViewPage对象可以看到它?