使用NancyFX和Razor视图引擎,怎么样?

时间:2015-03-07 05:13:33

标签: razor nancy

我正在通过nuget使用最新的NancyFX,并且还通过nuget安装了Razor视图引擎,因为SSVE并不适合我的需求(我需要更多的条件逻辑选项)。

麻烦的是,只要我调用Razor视图,我所能得到的就是500错误:

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)
   --- End of inner exception stack trace ---
   at Nancy.NancyEngine.InvokeOnErrorHook(NancyContext context, ErrorPipeline pipeline, Exception ex)

我在这里调用视图:

  return View["Content/views/IO/fileBrowser/ViewPage2.cshtml", dirListing];

在此之前没有错误。

视图完全空白,根本没有代码。我也尝试过查看指定布局的新视图,仍然是500错误。我试过引用我传递的模型,也尝试不通过模型。这都一样。你打算如何在南希使用Razor?什么是空引用?..

南希超级有趣的道路对我来说只是挫败感,没有什么可以开箱即用的:(

1 个答案:

答案 0 :(得分:0)

在您的Web应用程序的根目录中,您应该有一个views文件夹,所有路径都相对于views文件夹。

在不知道你的模块是什么样的情况下,我会给你一个例子:

public class ProductsModule : NancyModule
{
  public ProductsModule()
  {
    Get["/"] = _ => 
    {
      ....

      return ["index", mymodel];
    }
  }
}

默认情况下,不包括其他约定(包括本地化),Nancy会在products内为名为views的视图查找名为index的文件夹。

所以你的文件夹结构应该是:

-root
--views
---products
----index.cshtml

如果找不到视图,它将回顾views内的1个目录。所以,如果你的目录结构是:

-root
--views
---index.cshtml

然后它会找到你的视图并进行渲染。

发现视图还有很多,但这是您最常使用的一般设计。