【问题标题】:Using NancyFX with Razor view engine, how?将 NancyFX 与 Razor 视图引擎一起使用,如何?
【发布时间】:2015-03-07 05:13:32
【问题描述】:

我正在通过 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 与 Nancy 一起使用?什么是空引用?..

南希的超级有趣的道路对我来说不过是沮丧,没有什么是开箱即用的:(

【问题讨论】:

    标签: razor nancy


    【解决方案1】:

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

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

    public class ProductsModule : NancyModule
    {
      public ProductsModule()
      {
        Get["/"] = _ => 
        {
          ....
    
          return ["index", mymodel];
        }
      }
    }
    

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

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

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

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

    -root
    --views
    ---index.cshtml
    

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

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

    【讨论】:

    • 但它正在寻找视图。我尝试重命名视图,并按预期给出未找到视图的错误。另外,我可以将扩展名从 cshtml 更改为 .html 并且视图运行良好。当它尝试将视图处理为 Razor 时,我只是得到一些空引用。我想我需要找到那个引用是什么,但我不知道。
    • 那么需要有关您的视图的更多信息。您可能会丢失已包含在其中的程序集/命名空间,在这种情况下,您需要在 razor 配置文件中添加。 github.com/NancyFx/Nancy/wiki/…
    • 从来没有解决过这个问题。我最终抛弃了 nancy 并回到 vanilla MVC。从那时起,我所有的开发工作都变得轻松多了,一点也不后悔放弃“超级快乐的道路”的决定,对我来说,这是“每一个转弯的路障” ;(
    猜你喜欢
    • 2011-08-17
    • 2012-10-20
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多