MVC嵌入式视图

用户名

我正在尝试将视图以及CSS和JS嵌入到外部dll中。我主要在那儿。我从我的主项目中执行了Html.RenderPartial,似乎发现嵌入视图以及CSS和js都没问题(使用VirtualPathProvider)。

但是,该嵌入式视图随后调用一个操作(在外部dll中),该操作返回PartialView(也已嵌入式)。找到该视图(并且在顶部放置了@inherits System.Web.Mvc.WebViewPage语句,以避免有关“在上下文中找不到模型”的错误)。

但是,最后一个障碍似乎是关于“ ... WebViewPage不包含'DisplayFor'...的定义。”的错误,因为我正在使用@ Html.DisplayFor(.....

谁能告诉我该难题的最后一部分需要做什么?我已经将Web.config从Views文件夹复制到了我的dll所在的bin文件夹中(似乎由其他帖子暗示),但这没有帮助。

非常感谢

PS当将视图的构建操作设置为“复制到输出目录”并且我使用ViewEngine指向bin / views目录时,一切正常。只是到现在我才更改为嵌入式资源

亚历山大·克里斯托夫(Alexander Christov)

@ 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添加它在这里,我将不复制/粘贴以上链接的内容,您可以阅读并阅读其他信息。但是要当心,通过在另一个视图中使用帮助程序来引用它可能是一个更安全的解决方案,因为如果已经引用了该方法,则上述方法会注意到这一事实并报告错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章