2011-02-17 26 views
4

マイクロソフトでは、新しいWebサイト編集ツールWebMatrixを提供しています。 WebMatrixは、Razorがビューエンジンである新しいWeb Pageエンジンを使用します。 Razorは、MVC3の新しいビューエンジンです。私は登録することが可能であるかどうかを知ろうとしています。MVCで可能なようにWebページで別のビューエンジンを使用できますか?Web Matrix Webページのエンジンを表示

Webページのビューエンジンを追加または置き換えることができるかどうかは知っていますか?もしそうなら誰もこれを文書化しましたか?例?

+0

新しいWebページエンジンとは何ですか? MVCを使ってそこでミックスしてマッチさせることはできませんか? – mellamokb

+0

ASP.NETチームは、MVC3がそうでないようにasp.netのWebページが技術的にRazorに結びついていないことを明記しています(またReflectorで確認しています)。しかし、SparkのようなものをWebページに登録する方法の例は見当たりませんでした。チームのブログには、後でこれを訪問することが示されています。だから私はあなたにそれができることを奨励したいと思いますが、残念ながら達成のためのアドバイスはできません。 –

+0

は私の現在の思考パターンで答えを加えました。もし私が時間を見つけることができたら、後でSparkをフックしようとします。あなたが提示した面白い問題 –

答えて

2

私は少し後で、この自分自身を試すことを期待してんだけど、今のところ、私はちょうど私の現在の考え共有しましょう:ウェブページでは

を、カミソリは、ASP.NETのビルドパイプでBuildProviderを登録することで動作します.cshtmlと.vbhtmlの場合

WebPagesは、.cshtml .vbhtml拡張子をハンドラに登録します。

WebPagesページが要求されると、System.Web.WebPages.WebPageHttpHandlerはパスをビルドパイプに渡します。ここで、拡張子は登録済みのRazor Providerと一致し、ページをレンダリングし、WebPageオブジェクトを戻します。 IISに渡され、処理されます。

反射ツールを使用している場合は、このすべてが表示されます。これらの両方は、対応するアセンブリのPreApplicationStartCode.Start()で実現されます。

そのビルドプロバイダーをフックレイザー:私たちは私たちをレンダリングするためにASP.NETパイプで別のBuildProviderを作成し、登録する必要があると思い上書きするにはWebPageHandler

public static void Start() 
{ 
    if (!_startWasCalled) 
    { 
     _startWasCalled = true; 
     WebPageHttpHandler.RegisterExtension("cshtml"); 
     WebPageHttpHandler.RegisterExtension("vbhtml"); 
     PageParser.EnableLongStringsAsResources = false; 
     DynamicModuleUtility.RegisterModule(typeof(WebPageHttpModule)); 
     ScopeStorage.CurrentProvider = new AspNetRequestScopeStorageProvider(); 
    } 
} 

をフック

public static void Start() 
{ 
    if (!_startWasCalled) 
    { 
     _startWasCalled = true; 
     BuildProvider.RegisterBuildProvider(".cshtml", typeof(RazorBuildProvider)); 
     BuildProvider.RegisterBuildProvider(".vbhtml", typeof(RazorBuildProvider)); 
    } 
} 

ウェブページページ。 System.Web.WebPagesはWebPageHttpHandler.RegisterExtension()メソッドを提供しています。理論的には、Razorの代わりにWebPageリクエストを受け取る別のBuildProviderをフックできます。

いくつかのブログはRegisterExtensionメソッドについて言及していますが、100%機能しないことを示すオープン接続バグレポートもあります。すべてをオーバーライドして、buildproviderをパイプにフックする方が適切かもしれません(メソッドを使用しないでください)。

Web.configはbuildProvidersを登録するための構造を提供していますので、私はそれを試してみます。

<buildProviders> 
    <add extension=".cshtml" type="CustomStuff.CustomBuildProvider"/> 
</buildProviders> 

挑戦はそこビューエンジンのほとんどはViewEngines.Register()、ウェブページを持っているように見えない概念を使用することです。だから、私たちはBuildProviderでこれらのビューエンジンをラップするか、またはIViewEngineを正常に呼び出すことができるBuildProviderを作成する必要があります。

もう一度、私の思考を共有してください。私は時間を見つけたらSparkか何かを登録しようとします。

0

MVCと同じ方法でWebページにビューエンジンを登録することはできません。ファイルの種類を混在させて一致させるだけです。 .aspxファイルをWebページサイトに追加することを止めるものは何もありません。 Webページは、VSのWebサイトプロジェクトに似ています。

+0

.aspxやその他の現在サポートされているページタイプではなく、独自のビューエンジンを追加しようとしています。 –

+0

独自のビューエンジンを使用する場合は、MVCなどのフレームワークをサポートするフレームワークを使用する必要があります(mellamokb氏のように)。 Webページは、そのような拡張性をサポートしていません。 –

+0

私は現在MVCを使用していますが、時折、私はWebMatrix + Web Pagesのようなより単純なフレームワークを望みます。 ReflectorをWebページで使用すると、登録が行われていることがわかります.Razorは登録可能なエンジンなので意味があります。ウェブページが剃刀にロックされているかもしれませんが、わかりません。 –

関連する問題