ASP.NET MVC HTMLヘルパーのメモ
ASP.NET MVCには簡単にビューにHTMLをレンダリングできるHTMLヘルパーというものがあります。
Html.Action(), Html.Lavel(), Html.Editor()
とか
自作のHTMLヘルパーをHtmlHelperクラスの拡張メソッドとして追加することで、元からあるメソッドと同じようにHtml.
で呼び出して使うことができるのでそのメモです。
試しに引数として受け取ったstringのリストを使って、HTMLの順序なしリストを返すHTMLヘルパーを定義してみます。
拡張メソッド
using System.Web; using System.Web.Mvc; namespace App.Helpers { public static class HtmlHelperExample { public static IHtmlString ListItem(this HtmlHelper helper, IEnumerable<string> items) { string li = ""; foreach (var item in items) li += $"<li>{HttpUtility.HtmlAttributeEncode(item)}</li>"; return MvcHtmlString.Create($"<ul>{li}</ul>"); } } }
View(呼び出し)
@Html.ListItem(new List<string> { "Apple", "Banana", "Orange", "Grape" })
↓
<ul><li>Apple</li><li>Banana</li><li>Orange</li><li>Grape</li></ul>
HttpUtility.HtmlAttributeEncode()
: 受け取った文字列をエスケープします。
注意する点はString
ではなくIHtmlString
を返すところです。
IHtmlString
は「HTMLエンコード済みである」ことを表すオブジェクトです。
String
で返してしまうとRazor側でエスケープ処理されてしまうので、「この文字列はエスケープ済み」ということをRazor側に知らせるためMvcHtmlString.Create()
を使ってString
をIHtmlString
に変換します。
おわり。