2012-05-04 14 views
3

多くの条件付きロジック、ループ、部分的なビューなどを含むいくつかのRazorページがあります。出力マークアップを意味的に正しいものに保つのは簡単ですが、正しいインデントと改行でフォーマットするのは難しくなります。実行時に自動的にどうすればいいですか?モジュールまたはRazor拡張機能はありますか?Razorの出力をインデントと改行で自動フォーマットするにはどうすればよいですか?

右クリック - >書式選択をクリックしてください。明確にするために、私はRazorページを書くときに書式設定について考える必要がないようにしたいと思います。私はRazorのマークアップを開発者にとって意味のある方法でレイアウトすることを望んでいますが、「ソースの表示」をクリックした奇妙な人のためにレンダリングされたHTMLは「あらかじめ」表示されます。 (私はGZIP /デフレートを使用していますので、出力のサイズを大きく心配していないよ。)

答えて

4

あなたはActionFilterを実装し、TidyNethttp://sourceforge.net/projects/tidynet/)のようなライブラリを使用することができます。

public override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    if (filterContext.Result is ViewResult) 
    { 
     var tidy = new Tidy 
      { 
       Options = 
        { 
         DocType = DocType, 
         DropFontTags = DropFontTags, 
         LogicalEmphasis = LogicalEmphasis, 
         XmlOut = XmlOut, 
         Xhtml = Xhtml, 
         IndentContent = IndentContent, 
         HideEndTags = HideEndTags, 
         MakeClean = MakeClean, 
         TidyMark = TidyMark, 
        } 
       }; 

     filterContext.RequestContext.HttpContext.Response.Filter = 
      new HtmlTidyFilter(filterContext.RequestContext.HttpContext.Response.Filter, tidy); 
    } 
} 

フィルタのアルゴリズム:

public override void Write(byte[] buffer, int offset, int count) 
{ 
    var data = new byte[count]; 
    Buffer.BlockCopy(buffer, offset, data, 0, count); 
    string html = Encoding.Default.GetString(buffer); 

    using (var input = new MemoryStream()) 
    { 
     using (var output = new MemoryStream()) 
     { 
      byte[] byteArray = Encoding.UTF8.GetBytes(html); 
      input.Write(byteArray, 0, byteArray.Length); 
      input.Position = 0; 
      _tidy.Parse(input, output, new TidyMessageCollection()); 

      string result = Encoding.UTF8.GetString(output.ToArray()); 

      byte[] outdata = Encoding.Default.GetBytes(result); 
      _stream.Write(outdata, 0, outdata.GetLength(0)); 
     } 
    } 
} 

そしてあなただけのコントローラーに差し込み:

[TidyHtml] 
public class AnyController : Controller 

Voilá! ;)

私はこのソースからそれを学んだ:http://blog.aquabirdconsulting.com/2009/10/28/asp-net-mvc-clean-html/

+0

それはあなたの問題を解決しましたか? –