2011-06-30 3 views
0

ASP.NET MVCプロジェクト内に自動CoffeeScriptコンパイルを統合する作業を進めています。スクリプトのタグで.coffeeファイルを指定すると、サーバー上のjavascriptにコンパイルされます。BeginFormに似たHTMLヘルパーを作成し、サーバー側のブロックのコンテンツにアクセスできるようにします。

ビューに埋め込まれたCoffeeScriptで同じことをしたいと思っています。どのようにHtml.BeginForm IDisposeを使用して動作するのと同様の使用ブロック内のユーザーが提供するコンテンツをキャプチャすることができますいくつかの種類のHtmlHelperを書くことは可能ですか?

答えて

1

Html.BeginForm()は実際にusingブロックの内容を取得しません。これは、Disposeメソッドの応答に開始タグと終了タグを書き込むことによって、フォームタグで囲みます。IDisposable

Html.BeginForm()の実装hereとDisposeメソッドhereを参照してください。

ブロックの内容を実際にキャプチャする場合は、パラメータとしてRazor Templateを取るヘルパーメソッドを記述することができます。以下の方法で実装することによって

:あなたはカミソリでそれを使用することができます

public static class HtmlHelperExtensions 
{ 
    public static string CoffeeScript(this HtmlHelper htmlHelper, Func<HelperResult> template) 
    { 
     // Then you can access the contents of the block here 
     string contents = template().ToHtmlString(); 

     return DoSomething(string); 
    } 
} 

は次のように表示します。

@Html.CoffeeScript(@<text> 
    Anything can go here 
</text>;); 

UPDATE: だけ明確にする、あなたの拡張メソッド与えられたが属しますMyApplication.Extensions名前空間を使用する場合は、ビューの上部に以下を追加する必要があります。

@using MyApplication.Extensions; 
関連する問題