HTMLヘルパーを自作してみる
見様見真似でHTMLヘルパーを書いてみました。
F#で書かれた例を見かけなかったので、参考までに投稿しておきます。
ひとつ注意点があります。
F#で定義する際に、型拡張ではなく拡張メソッドとして記述します。*1
System.Runtime.CompilerServices.ExtensionAttribute を付与してあげてください。
そして、関数の第一引数はHtmlHelper型であることを明示します。
namespace FsWeb.Helpers open System open System.Web open System.Web.Mvc open System.Runtime.CompilerServices [<Extension>] module SampleHelper = [<Extension; CompiledName("CodeBlock")>] let createCodeBlock(_:HtmlHelper, code) = let builder = TagBuilder("pre") builder.MergeAttribute("style", "border: 1px black solid;" + "background-color: #eeeeee;" + "padding: 10px;" + "font: 1.2em Consolas;") builder.InnerHtml <- code builder.ToString() |> MvcHtmlString.Create
スタイルを直に指定していますが、サンプルということで大目に見てください・・・。
ビューのほうは、こんな感じです。
@using FsWeb.Helpers
(中略)
@Html.CodeBlock("let inline (|>) x f = f x")
おしまい。
*1:別クラスとして定義する場合はその限りではない