0

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

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

我遇到的问题是,当我使用来自外部程序集的模型类创建强类型外部视图时,无法在运行时编译视图,因为程序集没有传递给剃刀编译器。所以我收到以下错误:

编译器错误消息:CS0234:命名空间“MyNamespace”中不存在类型或命名空间名称“MyPlugin”(您是否缺少程序集引用?)

源错误:

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

当我使用动态模型、来自我的主 Web 程序集或来自我的 Web 项目中直接引用的程序集的模型类时,它工作正常。我确定在编译外部剃须刀视图之前加载了外部程序集,因为我的控制器工作得很好。

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

4

2 回答 2

1

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

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

ETC

于 2013-07-24T04:34:10.740 回答
0

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

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

于 2013-07-25T22:23:13.123 回答