MVC嵌入视图



我正试图将视图嵌入到外部dll中,并为它们添加css和js。我大部分时间都在那里。我做一个Html。RenderPartial从我的主要项目,似乎发现嵌入视图和css和js没有问题(使用VirtualPathProvider)。

然而,嵌入视图然后调用一个动作(在外部dll中),返回一个PartialView(也嵌入)。视图被找到了(我在顶部放置了一个@inherits System.Web.Mvc.WebViewPage语句,以避免关于'model not found in context'的错误)。

然而最后一个障碍似乎是关于"…"的错误。WebViewPage不包含'DisplayFor'....."的定义,因为我使用的是@Html.DisplayFor(.....

谁能告诉我,我需要做的最后一点拼图工作?我已经复制了网页。从Views文件夹配置到我的dll所在的bin文件夹(似乎是由其他帖子暗示的),但这没有帮助。

thanks very much

PS当视图的构建操作被设置为复制到输出目录时,我使用ViewEngine指向bin/views目录,它都工作得很好。直到现在我才把它改成了嵌入式资源

@Html.DisplayFor(…)是一个扩展方法,具有以下签名:

public static MvcHtmlString DisplayFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression,
    string templateName
)

它驻留在System.Web.Mvc.Html (System.Web.Mvc.dll)中,需要被引用,这样视图才能正确编译。如何引用它是另一个问题,但您可以通过默认VPP在其他视图中呈现它,或者您可以这样做:

  • 如果您想确保它是可用的,以便尝试诊断为什么它没有在运行时加载,您可能希望预编译您的视图。只需在项目文件中添加以下内容:

    <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
        <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
    </Target>
    

这将显示您在构建而不是运行时编译视图时可能出现的任何错误。

  • 但是,如果您仍然不能在运行时引用程序集,那么您可能需要使用BuildManager.AddReferencedAssembly添加它。在这里,我不打算复制/粘贴上面链接的内容,你可以阅读它并阅读其他信息。但是,请注意,在另一个视图中使用helper来引用它可能是一个更安全的解决方案,因为如果它已经被引用,上述方法会注意到这个事实并报告一个错误。

相关内容

  • 没有找到相关文章

最新更新