2011-11-19 12 views
9

レンダリングパイプラインに関する私の質問は、ASP.NET MVCパイプラインスキームを見て、View Engineと呼ばれるステップがありました。このシナリオについて知りたい:ASP.NET MVCの面倒なページライフサイクル

  • 最初にレンダリングされるのは、マスターページまたはビューですか?
  • Response.End()をページの先頭にある@{}ブロックに使用すると、ページの実行が中断され、ビューのレンダリングが停止しますか?

答えて

15

最初にレンダリングされるもの、マスターページまたはビューは何ですか?

ビュー。パーサーはレイアウトから開始し、子ビューと部分的に再帰するLIFO(Last In First Out)構造を構築します。 LIFOが準備完了すると、LIFOはポップアウトして要素を処理し始めます。つまり、最も内側の部分/ビューはレイアウトの前に処理され、最後に処理されるのはレイアウトそのものです。私は、ページの先頭に@ {}ブロック内Response.Endの()を使用している場合は

ページのこの interupt実行を行い、停止は、ビューのレンダリング?

いずれのビューでもResponse.Endを使用すると、完全に空白のページがレンダリングされます。いずれのビューでも使用しないでください。 Response.Endは基本的には、あなたのRazorビューでやりたいことではないThreadAbortExceptionをトリガーすることによって、現在のスレッドを打ち切ります。

+0

ああ、ありがとう、これは私のために多くのことを説明しています! – Alexander

2

スティーブサンダーソンのRequest-Handling Pipeline Posterをご覧ください。全体の要求プロセスを非常に詳細に説明します。これはMVCバージョン1.0のものですが、それでも有効です。単にWebFormをRazorに置き換えてください。

マスターまたはビューが最初にレンダリングされるかどうかは気にしないでください。なぜこのことがあなたにとって重要なのか説明できますか?

+0

場合によっては、どのように動作するかを知ることができますが、それが他の方法ではなくこのように機能する理由を理解するのに役立ちます。 – Alexander

+3

この知識が良い理由を説明できます。私は私のプロジェクトでバンドルするためにカセットを使用してきました。ページにリソースバンドルを含めるための静的メソッドがあります。子ビューで '@ {Bundles.Reference("〜/ bundle/pageScripts "、" Head ");}'のようなコードブロックが最初に実行され、レイアウトに定義されているjqueryに依存する場合は、子ビューの後に実行されるため、スクリプトファイルの順序が正しくない可能性があります。これを修正するにはいくつかの方法がありますが、その順番でコールが発生している理由を知ることができます。 – JonathanTech

+2

@ JonathanTechの理由は、私もこれを知る必要があった理由です。私は、カセットの代わりにMVC4のSystem.Web.Optimizationを使用しています。しかし、同じアイデア。 –

関連する問題