【问题标题】:External razor views can't see external models外部剃须刀视图看不到外部模型
【发布时间】:2023-04-09 02:21:02
【问题描述】:

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

我能够通过为 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。

【问题讨论】:

  • 您是否尝试过此处提到的任一选项:stackoverflow.com/questions/4953330/…
  • @Brent 我无法在 web.config 中引用我的程序集,因为它们在 web 应用程序启动之前不可用。否则,它会解决问题。
  • @Maskim 您引用了多少外部程序集?是只有一个,还是有几个?
  • 如果在运行时加载,您能否解释一下您的控制器如何在编译期间找到这些模型?你不是从你的控制器中引用它们吗?
  • @Pranav 控制器、模型和视图都在同一个加载的程序集中,因此它们与模型一起编译。

标签: c# asp.net asp.net-mvc-4 razor razorgenerator


【解决方案1】:

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

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

【讨论】:

  • 不,它没有帮助。当视图由于某种原因被编译时,它不知道我的外部程序集。
  • 你加载到同一个应用域?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    相关资源
    最近更新 更多