Nancy.ViewEngines.Razor v0.12.1.0是否支持布局视图amd\u ViewStart?

Nancy.ViewEngines.Razor v0.12.1.0是否支持布局视图amd\u ViewStart?,razor,nancy,Razor,Nancy,我刚开始和Nancy打交道,使用Nuget上当前的版本v0.12.1.0,我想使用Razor视图引擎 Razor view引擎的v0.12.1.0是否支持布局和_ViewStart e、 g 我在~/Views/\u ViewStart.cshtml @{ Layout = "~/Views/Shared/_Layout.cshtml"; } @inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic> <

我刚开始和Nancy打交道,使用Nuget上当前的版本v0.12.1.0,我想使用Razor视图引擎

Razor view引擎的v0.12.1.0是否支持布局和_ViewStart

e、 g

我在
~/Views/\u ViewStart.cshtml

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
<!DOCTYPE html>
<html>
<head>
    @RenderSection("head", false)
</head>
<body>
    @RenderBody()
</body>
</html>
<h1>Home</h1>
~/Views/Shared/_Layout.cshtml

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
<!DOCTYPE html>
<html>
<head>
    @RenderSection("head", false)
</head>
<body>
    @RenderBody()
</body>
</html>
<h1>Home</h1>
我的主页模块如下所示:

public class Home : NancyModule
{
    public Home()
        : base("")
    {
        Get["/"] = _ => View["Index"];
    }
}

据我所知,简单的答案是否定的

一个更详细的答案,来自我做的有限研究

在MVC2中,Microsoft添加了System.Web.Razor dll,其中包含Razor解析器和代码生成器。MVC 3中添加了_ViewStart功能,在该版本中,Microsoft没有创建新的System.Web.dll。相反,他们将新的解析器和代码生成器嵌入到System.Web.Mvc.Razor命名空间下的新System.Web.Mvc dll中。我不确定这一变化背后的原因,也许是为了简化部署


Nancy Razor viewengine引用了原始的Razor解析器和代码生成器,因此无法访问MVC 3中Razor的任何新功能。我没有与NancyFx的人进行任何讨论,也没有看到(在快速搜索后)GitHub上的任何问题或google组中的讨论,因此我不知道他们是否计划更改viewengine。

\u ViewStart
不是我们(当前)支持的东西,但是从Nancy v0.20开始,每个视图都明确支持
布局

现在支持_ViewStart文件

作为提示,在引用布局文件时,不要在位置前面加前缀,因为它是
~/
。只需执行以下操作,否则将出现空引用异常

@{
    Layout = "Views/Shared/_Layout.cshtml";
}

我想补充一下答案,因为我花了大约一天的时间试图找出这个答案:

Nancy.RequestExecutionException: Oh noes! ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at Nancy.ViewEngines.DefaultViewCache.GetOrAdd[TCompiledView](ViewLocationResult viewLocationResult, Func`2 valueFactory)
   at Nancy.ViewEngines.Razor.RazorViewEngine.GetOrCompileView(ViewLocationResult viewLocationResult, IRenderContext renderContext, Assembly referencingAssembly, Type passedModelType)
   at System.Dynamic.UpdateDelegates.UpdateAndExecute5[T0,T1,T2,T3,T4,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
   at CallSite.Target(Closure , CallSite , RazorViewEngine , ViewLocationResult , IRenderContext , Assembly , Object )
   at Nancy.ViewEngines.Razor.RazorViewEngine.GetViewInstance(ViewLocationResult viewLocationResult, IRenderContext renderContext, Assembly referencingAssembly, Object model)
   at System.Dynamic.UpdateDelegates.UpdateAndExecute5[T0,T1,T2,T3,T4,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
   at Nancy.ViewEngines.Razor.RazorViewEngine.<>c__DisplayClass27.b__26(Stream stream)
   at Nancy.Responses.MaterialisingResponse.PreExecute(NancyContext context)
Nancy.RequestExecutionException:哦,没有!-->System.NullReferenceException:对象引用未设置为对象的实例。
在Nancy.ViewEngines.DefaultViewCache.GetOrAdd[TCompiledView](ViewLocationResult ViewLocationResult,Func`2 valueFactory)中
位于Nancy.ViewEngines.Razor.RazorViewEngine.GetOrCompileView(ViewLocationResult ViewLocationResult,IRenderContext renderContext,程序集引用Gassembly,类型passedModelType)
在System.Dynamic.UpdateDelegates.UpdateAndExecute5[T0,T1,T2,T3,T4,TRet](调用站点,T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4)
在CallSite.Target(闭包、调用站点、RazorViewEngine、ViewLocationResult、IRenderContext、程序集、对象)
位于Nancy.ViewEngines.Razor.RazorViewEngine.GetViewInstance(ViewLocationResult ViewLocationResult、IRenderContext renderContext、程序集引用Gassembly、对象模型)
在System.Dynamic.UpdateDelegates.UpdateAndExecute5[T0,T1,T2,T3,T4,TRet](调用站点,T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4)
在Nancy.ViewEngines.Razor.RazorViewEngine.c__显示类27.b__26(流)
在Nancy.Responses.MaterialisingResponse.PreExecute(NancyContext上下文)
与Richard Banks的回答类似-Nancy不会解析Views/_ViewStart.cshtml文件(即:~/Views/Shared/_layout.cshtml)中的默认布局路径。Nancy中的视图解析程序不会解释~/


您可以删除~/部分,也可以注释掉默认布局,然后在每个视图上手动指定布局。我之所以选择后者,是因为Nancy仍然执行_Layout.cshtml,即使您已将视图中的布局置空。

\u现在支持ViewStart这在将视图作为嵌入式资源使用时似乎不起作用。我只是没有看到它,但Nancy的文档中确实应该包含这一点!我为此苦苦挣扎了几个小时,却不知道为什么在部署我的站点时,我的布局路径不起作用。@Maciek with Nancy 1.4.3它确实可以作为嵌入式资源使用。只需确保
\u ViewStart.cshtml
的build属性设置为“embedded resource”。