我对外部剃须刀视图有疑问。 在我的项目中,我有主要的mvc web程序集和动态加载的外部类库程序集(来自DB)和他们自己的控制器,视图和模型。这些程序集不会在运行时直接引用和加载。
我能够通过为Controllers创建自定义控制器工厂来实现整个系统的工作,Controllers是Views的自定义虚拟路径提供程序。视图是我外部程序集中的嵌入资源。
我遇到的问题是当我使用外部程序集中的模型类创建强类型外部视图时,视图无法在运行时编译,因为程序集未传递给剃刀编译器。所以我收到以下错误:
编译器错误消息:CS0234:类型或命名空间名称 命名空间'MyNamespace'中不存在'MyPlugin'(你错过了吗? 装配参考?)
来源错误:
public class
_Page_ExternalViews_MyController_MyAction_cshtml : System.Web.Mvc.WebViewPage<MyNamespace.MyPlugin.Models.MyModel>
{
当我使用动态模型,主Web程序集中的模型类或直接在我的Web项目中引用的程序集时,它工作正常。我确信外部装配是在编译外部剃刀视图之前加载的,因为我的控制器工作得很好。
我开始查看RazorGenerator项目以预编译我的外部视图,但无法取得任何进展(没有生成任何内容),我甚至不确定我是否正在寻找正确的方向,因为我的程序集在运行时加载,我必须使用自己的ViewEngine和ControllerFactory。
答案 0 :(得分:1)
尝试在动态程序集的Views中使用using指令。
@using MyNamespace.MyPlugin.Models;
@using MyNamespace.MyPlugin;
等
答案 1 :(得分:0)
我能够在程序集中使用RazorGenerator Visual Studio扩展(而不是RazorGenerator.Mvc
一个)预编译视图。
在程序集编译之前,它基本上将.cshtml
razor视图转换为.cs
个类WebViewPage
个类。
在我的网络项目中,我必须实现与this one
VirtualPathProviderViewEngine