Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC嵌入式视图_C#_Asp.net Mvc 4_Razor_Virtualpathprovider - Fatal编程技术网

C# MVC嵌入式视图

C# MVC嵌入式视图,c#,asp.net-mvc-4,razor,virtualpathprovider,C#,Asp.net Mvc 4,Razor,Virtualpathprovider,我正在尝试将视图与css和js一起嵌入到外部dll中。我大部分时间都在那里。我在我的主项目中做了一个Html.RenderPartial,这似乎发现嵌入的视图、css和js没有问题(使用VirtualPathProvider) 但是,该嵌入视图随后调用一个操作(在外部dll中),该操作返回一个PartialView(也是嵌入的)。视图被找到了(我在顶部放了一个@inherits System.Web.Mvc.WebViewPage语句,以避免关于“在上下文中找不到模型”的错误) 然而,最后一个障

我正在尝试将视图与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目录时,一切正常。直到现在,我才更改为Embedded Ressource

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

public static MvcHtmlString DisplayFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression,
    string templateName
)
public static MvcHtmlString DisplayFor(
这个HtmlHelper html,
表情表情,
字符串模板名
)
它驻留在需要引用的System.Web.Mvc.Html(System.Web.Mvc.dll)中,以便正确编译视图。如何引用它是另一个问题,但您可以通过默认VPP在其他视图中呈现它,或者您可以执行以下操作:

  • 如果要确保该视图可用,以便尝试诊断运行时未加载该视图的原因,您可能希望预编译视图。只需将以下内容添加到项目文件中:

    <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
        <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
    </Target>
    
    
    。在这里,我不打算复制/粘贴上述链接的内容,您可以阅读它,也可以阅读其他信息。
    但是,请注意,通过在另一个视图中使用辅助对象来引用它可能是更安全的解决方案,因为如果已经引用了它,则上述方法会注意到这一事实并报告错误

该库已在项目中引用。事实上,外部dll是一个完整的Mvc网站项目-可能不必要,但它是确保所有razor语法都具有intellisense等功能的一种快速方法。因此它就在那里,但显然我缺少将嵌入式资源字符串转换为编译视图的技巧。我需要设置吗自定义工具属性?我需要安装Razor generator加载项吗?我的项目文件中已存在该项否,您不会错过任何“技巧”。所有这些都在那里,您的VirtualPathProvider负责确保Razor选择编译视图时该视图可用。您需要确保它已编译。要做到这一点,有一种困难的方法:调查在ASP.NET临时文件夹中输出视图。或者,为了使事情更简单,添加(或类似)在您的web.config中,然后深入研究它。这不是很令人兴奋,但很有帮助。它不会抱怨@Html.Raw only Html.DisplayFor。我取出了DisplayFors,但留下了Raw,效果很好。我的VirtualPathProvider应该做的不仅仅是用流GetManifestResourceStream返回新的EmbeddedVirtualFile(virtualpath,stream)吗(resourceName)?我需要在那里做些什么吗?好的-知道了。我在视图中使用了System.Web.Mvc,但我需要使用System.Web.Mvc.Html.Doh!感谢您的时间:)这就是我建议预编译您的视图的原因。您会尽早发现错误的。祝您好运!