10

Nuget の現在のビルド v0.12.1.0 を使用して、Nancy を理解しようとしています。Razor ビュー エンジンを使用したいと考えています。

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>

しかし、ホームページにアクセスしたときに得られるのは、設定したビューのコンテンツだけです~/Views/Home/Index.cshtml

<h1>Home</h1>

My Home モジュールは次のようになります。

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

4 に答える 4

28

Nancy v0.20 以降、_ViewStart ファイルがサポートされるようになりました。

ヒントとして、レイアウト ファイルを参照するときは、場所の前に を付けないでください~/。次のものを用意するか、null 参照例外が発生します。

@{
    Layout = "Views/Shared/_Layout.cshtml";
}
于 2014-01-08T22:41:40.737 に答える
8

_ViewStart(現在)サポートしているものではありませんが、Layoutビューごとにサポートされていることは間違いありません

于 2012-10-15T20:22:55.780 に答える
2

これを理解しようとして約1日を失ったので、答えに追加したかったのです。

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)

Richard Banks の回答と同様に、Nancy は Views/_ViewStart.cshtml ファイル (つまり、~/Views/Shared/_Layout.cshtml) の既定のレイアウト パスを解決しません。~/ は Nancy のビュー リゾルバーでは解釈されません。

~/ の部分を削除するか、デフォルトのレイアウトをコメントアウトして、各ビューのレイアウトを手動で指定できます。私が後者にした理由は、ビューでレイアウトを無効にした場合でも、Nancy が _Layout.cshtml を引き続き実行するためです。

于 2014-10-19T03:02:33.787 に答える
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 ビューエンジンは元の Razor パーサーとコード ジェネレーターを参照するため、MVC 3 の Razor の新しい機能にアクセスすることはできません。クイック検索) GitHub の問題や google グループでのディスカッションなど、彼らがビューエンジンを変更する予定があるかどうかはわかりません。

于 2012-10-15T19:53:54.870 に答える