【问题标题】:Embedding Razor views in class library as resources在类库中嵌入 Razor 视图作为资源
【发布时间】:2011-01-06 15:25:56
【问题描述】:

我正在使用 VirtualPathProvider 来提供主题视图。

在操作方法中我想通过路径返回一个视图

return View("~/Themes/SomeTheme.dll/Views/Content/Item.cshtml");

在 Visual Studio 中,Item.cshtml 有一个构建操作“嵌入式资源”。
VirtualPathProvider 找到了那个 .cshtml 文件,但我得到一个错误

The view at '~/Themes/SomeTheme.dll/Views/Content/Item.cshtml' must derive from WebViewPage, or WebViewPage<TModel>.

我想我必须编译那个视图,我已经关注了these instructions

现在 VirtualPathProvider 找不到 Item.cshtml,因为它不再是嵌入式资源。

我该如何解决这个问题?我无法添加对该 SomeTheme.dll 的引用,因为激活的主题是在应用程序启动时动态加载的。

我以前用 aspx 文件做过这个,那些不需要编译。它们作为嵌入式资源开箱即用。

【问题讨论】:

  • 抱歉,回复晚了,没有收到这个问题。您是否设法让编译后的视图现在运行?如果您使用的是编译版本,则不应在路径中使用 dll 名称。
  • 我设法用不同的方法让它工作。写了一篇关于它的博文mikakolari.fi/blogi/…
  • Mika,指向您博客的链接似乎不再有效。你可以在这里发布解决方案吗?我在编译 Razor 视图时遇到了同样的问题。
  • 我把它重新上线了,但我必须说有一些神秘的问题。我会采取不同的方法。

标签: asp.net-mvc razor


【解决方案1】:

我在嵌入的 aspx 视图中遇到了类似的问题。查看页面时发生的编译依赖于视图文件夹的 web.config 中的一些设置。嵌入的资源不在views文件夹中,所以不要使用这些设置,编译失败。

【讨论】:

    【解决方案2】:

    试试install-package EmbeddedResourceVirtualPathProvider

    【讨论】:

      【解决方案3】:

      尝试this solution 在您的视图类库中处理智能感知。您可能需要将以下行添加到该 web.config。

      <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />        
      

      另外,请尝试将 @Inherits System.Web.Mvc.WebViewPage 语句添加到每个嵌入式视图(或替换您使用的基类)以在运行时处理此问题。

      【讨论】:

        猜你喜欢
        • 2016-01-15
        • 1970-01-01
        • 2014-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多