我正在通过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?什么是空引用?..
南希超级有趣的道路对我来说只是挫败感,没有什么可以开箱即用的:(答案 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
然后它会找到你的视图并进行渲染。
发现视图还有很多,但这是您最常使用的一般设计。