我正在尝试将视图与css和js一起嵌入到外部dll中。我大多在那里。我从我的主项目做一个Html.RenderPartial,它似乎找到嵌入式视图,css和js没问题(使用VirtualPathProvider)。
然而,嵌入式视图会调用一个动作(在外部dll中),它返回一个PartialView(也是嵌入式)。找到了视图(我在顶部放置了一个@inherits System.Web.Mvc.WebViewPage语句,以避免出现'在上下文中找不到模型'的错误。)
然而最后的障碍似乎是关于“...... WebViewPage不包含'DisplayFor'的定义......”的错误,因为我正在使用@ Html.DisplayFor(.....
任何人都可以告诉我,我需要做些什么来完成拼图的最后一点工作?我已经将来自Views文件夹的web.config复制到我的dll所在的bin文件夹中(似乎是由其他帖子实现的),但这没有帮助。
非常感谢
PS当视图的构建操作设置为“复制到输出目录”并且我使用ViewEngine指向bin / views目录时,一切正常。我现在才更改为Embedded Ressource
答案 0 :(得分:2)
@ 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>
这将揭示您在视图中编译它们时可能遇到的任何错误,而不是运行时。