Custom Html helper
Noen ganger kan det være kjekt å lage sine egne Html helpers. For å gjøre det bygger vi bare en extension på den innebygde Html klassen i vår egen klasse.
Vi lager en ny mappe, kaller den Extensions og lager en ny static klasse som heter HtmlHelper:
public static class HtmlHelpers
{
public static MvcHtmlString UnorderedList(this HtmlHelper htmlHelper, IEnumerable list)
{
var ul = new TagBuilder("ul");
var listString = new StringBuilder();
foreach (var item in list)
{
var li = new TagBuilder("li");
li.SetInnerText(item);
listString.Append(li);
}
ul.InnerHtml = listString.ToString();
return MvcHtmlString.Create(ul.ToString());
}
}
Vi bruker klassen TagBuilder til å lage en <ul>-tag, og bygger <li>-tags utfra listen som blir sendt inn.
Vi kan teste vår nye liste i Index.cshtml:
<h2>UL</h2>
@Html.UnorderedList(new[] {"Frank", "Per", "Ole"})
<hr/>
Og vips, det funker!
For å gjøre helperen vår lettere å bruke, benytter vi oss av et supertriks i C# og skriver den om til å ta inn lista på formen params string[] list:
public static MvcHtmlString UnorderedList(this HtmlHelper htmlHelper, params string[] list){
.....
}
Det betyr at vi fremdeles kan sende inn en liste, men vi kan også sende inn kommaseparerte strings på denne måten:
@Html.UnorderedList("Frank", "Per", "Ole", "Jarle")
<= Tilbake