我正在使用Nuget,v0.12.1.0上的当前构建来处理Nancy,我想使用Razor视图引擎。
Razor视图引擎的v0.12.1.0是否支持Layout和_ViewStart?
e.g。
我在~/Views/_ViewStart.cshtml
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
以及~/Views/Shared/_Layout.cshtml
@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
<!DOCTYPE html>
<html>
<head>
@RenderSection("head", false)
</head>
<body>
@RenderBody()
</body>
</html>
但是当我点击主页时,我得到的就是我在~/Views/Home/Index.cshtml
中设置的视图的内容
<h1>Home</h1>
我的主页模块如下所示:
public class Home : NancyModule
{
public Home()
: base("")
{
Get["/"] = _ => View["Index"];
}
}
答案 0 :(得分:29)
从Nancy v0.20开始,现在支持_ViewStart文件。
作为提示,在引用您的布局文件时,请不要为~/
的位置添加前缀。只需拥有以下内容,否则您将获得空引用异常。
@{
Layout = "Views/Shared/_Layout.cshtml";
}
答案 1 :(得分:8)
_ViewStart
不是我们(目前)支持的内容,但基于每个视图肯定支持Layout
答案 2 :(得分:2)
据我所知,简单的答案是否定的。
从我所做的有限研究中得到更详细的答案。
在MVC 2中,Microsoft添加了一个包含Razor解析器和代码生成器的System.Web.Razor dll。在MVC 3中添加了_ViewStart功能,在该版本中,Microsoft没有创建新的System.Web.Razor dll。相反,他们将新的解析器和代码生成器嵌入到System.Web.Mvc.Razor命名空间下的新System.Web.Mvc dll中。我不确定这种变化背后的原因,可能是为了简化部署。
Nancy Razor viewengine引用了原始的razor解析器和代码生成器,因此无法访问MVC 3中Razor的任何新功能。我没有与NancyFx人进行任何讨论,也没有看(快速搜索后)GitHub上的任何问题或谷歌小组的讨论,所以我不知道他们是否打算改变视频引擎。
答案 3 :(得分:2)
我想补充一下答案,因为我失去了大约一天试图解决这个问题:。
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)
与理查德班克斯的答案类似 - 南希没有解析Views / _ViewStart.cshtml文件中的默认布局路径(即:〜/ Views / Shared / _Layout.cshtml)。在Nancy的视图解析器中解释了〜/ isn。
您可以删除〜/ part,也可以注释掉默认布局,并在每个视图上手动指定布局。我做后者的原因是因为Nancy仍然执行_Layout.cshtml,即使你已经在视图中排除了布局。