外部剃刀视图可以';t参见外部模型

本文关键字:外部 模型 剃刀 视图 | 更新日期: 2023-09-27 18:24:41

我对外部剃刀视图有问题。在我的项目中,我有主mvc web组件和动态加载的外部类库组件(来自DB),它们有自己的控制器、视图和模型。这些程序集不是在运行时直接引用和加载的。

我能够通过为Controllers创建一个自定义控制器工厂来使整个系统工作,这是Views的一个自定义虚拟路径提供程序。这些视图是我的外部程序集中的嵌入资源。

我遇到的问题是,当我从外部程序集创建具有模型类的强类型外部视图时,该视图无法在运行时编译,因为程序集没有传递给razor编译器。所以我得到以下错误:

编译器错误消息:CS0234:类型或命名空间名称命名空间"MyNamespace"中不存在"MyPlugin"(您是否缺少装配参考?)

来源错误:

public class
_Page_ExternalViews_MyController_MyAction_cshtml : System.Web.Mvc.WebViewPage<MyNamespace.MyPlugin.Models.MyModel>
{

当我使用动态模型、主web程序集中的模型类或web项目中直接引用的程序集时,它可以很好地工作。我确信在编译外部剃刀视图之前已经加载了外部程序集,因为我的控制器工作得很好。

我开始考虑RazorGenerator项目来预编译我的外部视图,但没有取得任何进展(没有生成任何内容),我甚至不确定我的方向是否正确,因为我的程序集是在运行时加载的,我必须使用自己的ViewEngine和ControllerFactory。

外部剃刀视图可以';t参见外部模型

尝试在动态程序集中的视图中使用using指令。

@using MyNamespace.MyPlugin.Models;
@using MyNamespace.MyPlugin;

etc

我能够在程序集中使用RazorGenerator Visual Studio扩展(而不是RazorGenerator.Mvc扩展)预编译视图。

它基本上将.cshtml剃刀视图转换为带有WebViewPage类的.cs文件,然后再编译程序集。在我的web项目中,我必须实现我自己的VirtualPathProviderViewEngine,类似于这个