2012-10-15 18 views
10

我只是使用Nuget,v0.12.1.0上的当前构建来与Nancy握手,并且我想使用Razor视图引擎。Nancy.ViewEngines.Razor v0.12.1.0是否支持布局视图amd _ViewStart?

Razor视图引擎的v0.12.1.0是否支持Layout和_ViewStart?

例如

我已经中~/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> 

以下但所有我得到的时候我打的主页是我设置的一个观点的内容in ~/Views/Home/Index.cshtml

<h1>Home</h1> 

My Home module looks lik e这:

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

回答

8

_ViewStart是不是我们(目前)的支持,但Layout绝对支持在每个视图基础

+8

_ViewStart现在支持 – TheCodeJunkie

+0

哈利路亚:d:d – nathanchere

2

从我可以告诉,简单的答案是没有。

更详细的答案,来自我所做的有限研究。

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

Nancy Razor viewengine引用了原始的剃刀分析器和代码生成器,因此无法在MVC 3中访问任何Razor的新功能。我没有和NancyFx的人讨论过,不要在GitHub上查看任何问题或者在Google小组中讨论,所以我不知道他们是否打算改变viewengine。

29

由于南希的v0.20的_ViewStart文件现在支持。

作为提示,引用布局文件时,不要在位置前加上~/。只需拥有以下内容即可获得空引用异常。

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

这是整齐的男人 – misaxi

+0

这不会出现使用视图时,作为嵌入式资源 – Maciek

+1

但愿我只是没有看到它,工作,但这个确实应该在文档对于南希!我苦苦挣扎了几个小时,没有理解为什么我的网站部署时布局路径不工作。 –

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) 

理查德·班克斯的答案相似 - 南希不能解决您的意见/ _ViewStart.cshtml文件的默认布局路径(即:〜/查看/共享/ _Layout.cshtml)。 〜/不在Nancy的解析器中解释。

您可以删除〜/ part,或者注释掉默认布局,并在每个视图中手动指定布局。我做后者的原因是,即使您已经在视图中清除了布局,Nancy仍会执行_Layout.cshtml。