Chciałem napisać własny Tag Helper. Miałem na początku mały problem. Tag Helper powinien być w moim odczuciu co najmniej sporadycznie używany w różnych widokach. Nie widzę potrzeby tworzenia Tag Helpera skoro ma być użyty tylko raz. Nie przyszedł mi do głowy żaden sensowny pomysł, który fajnie zgrywałby się z moją stroną pokerową. Jednakże pomyślałem sobie, że czasem warto robić sztukę dla sztuki – tylko po to, aby się czegoś nauczyć.
Trzeba zacząć od tego, ze Tag Helper przyjmuje argument na podstawie którego wykonuje jakieś operacje, które napiszemy. Więc mój Tag Helper musi przyjmować jakiś argument.
Postanowiłem więc stworzyć Tag Helper, który randomowo będzie wyświetlać imię gracza z dopiskiem, że ten gracz dziś wygra. Za każdym razem w momencie kiedy strona się odświeży będzie losowo wybierany inny gracz.
Kod TagHelpera.
using Microsoft.AspNet.Razor.TagHelpers; using PokerWebsite.Core.Domain; using System; using System.Collections.Generic; using System.Linq; namespace PokerWebsite.Views.TagHelpers { [HtmlTargetElement("players", Attributes = PlayersArrtibuteName)] public class RandomTextTagHelper : TagHelper { private const string PlayersArrtibuteName = "win"; [HtmlAttributeName(PlayersArrtibuteName)] public IEnumerable<Player> Players { get; set; } public override void Process(TagHelperContext context, TagHelperOutput output) { var players = Players.ToList(); Random rnd = new Random(); int r = rnd.Next(players.Count); output.Content.SetContent("Today will win: " + players[r].Name); } } }
Źródło cshtml.
@model IEnumerable<PokerWebsite.Core.Domain.Player> <p> <players win="@Model"></players> </p>
Plik _ViewImports.cshtml
@using PokerWebsite @addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers" @addTagHelper "*, PokerWebsite"