Kłopot ze zrozumieniem metod towarzyszących klasie HtmlHelper

0

Witam, proszę o wyjaśnienie mi jak działa klasa PagingHelpers, tak żebym zrozumiał co się dzieje.

Wiem co to jest HtmlHelper, że używam jej w celu zrobienie hyperlinków, wiem też czemu moja metoda rozszerzająca odnosi się do klasy HtmlHelper, +- ogarnąłem co robią metody w pętli for, ale właśnie tylko +- . Czytałem na temat metod związanych z TagBuilder ale nadal się gubię.

public static class PagingHelpers
    {
        public static MvcHtmlString PageLinks(this HtmlHelper html, PagingInfo pagingInfo, Func<int, string> pageUrl)
        {
            StringBuilder result = new StringBuilder();

            for (int i = 1; i <= pagingInfo.TotalPages; i++)
            {
                TagBuilder tag = new TagBuilder("a"); //tworzenie znacznika <a>
                tag.MergeAttribute("href", pageUrl(i));
                tag.InnerHtml = i.ToString();

                if (i == pagingInfo.CurrentPage)
                    tag.AddCssClass("selected");
                result.Append(tag.ToString());
            }

            return MvcHtmlString.Create(result.ToString());
        }
    }

I tutaj jeszcze klasa PagingInfo żeby było wiadomo co w niej jest:

public class PagingInfo
    {
        public int TotalItems { get; set; }
        public int ItemsPerPage { get; set; }
        public int CurrentPage { get; set; }

        public int TotalPages
        {
            get { return (int)Math.Ceiling((decimal)TotalItems / ItemsPerPage); }
        }
    }

P.S Jaka jest praktyczna różnica jeżeli użyję metody HtmlHelper w takiej postaci co wyżej, a co by było gdybym skorzystał w widoku z @Html.ActionLink i sobie to jakoś w ten sposób ogarnął ? <- jeżeli to pytanie jest głupie to proszę się nie śmiać po prostu ostatnio generowałem hyperlinki dzięki którym mogłem zmieniać strony właśnie za pomocą @Html.ActionLink tylko że wtedy miałem kilka widoków a teraz póki co mam jeden.

`dodanie znaczników ``` - @furious programming

0

Dla każdej strony (TotalPages) tworzony jest element HTML a (czyli link) z linkiem wygenerowanym przez metodę pageUrl (przekazywaną w argumencie), i treścią ustawioną na numer strony. Dodatkowo, obecnie wybrana strona (CurrentPage) otrzymuje dodatkową klasę CSS selected.

Nie musisz używać HtmlHelpera, ale dzięki niemu nie musisz powtarzać podobnego kodu na wielu stronach (zasada DRY), do tego enkapsuluje tworzenie określonego elementu strony do jednej klasy, więc nie jest on umieszczony w kodzie strony (zasada SRP).

0

Dzięki za odpowiedź rozjaśniło mi się co nieco, ale chciałem się jeszcze dopytać o parę rzeczy. Chodzi o to że jak tworzę nowy obiekt TagBulider to przekazuje w nawiasie "a" i co się dalej dzieje z tym znacznikiem ? Wszedłem w Visual Studio TagBuilder -> Go To Definition i widzę że klasa TagBuilder ma konstruktor który ma parametr string name. Czyli się zgadza ale, czy w tym konstruktorze znajdują się jeszcze jakieś metody które robią coś z tym "a" ?

Czyli ta linijka generuje linki, które połączone z "a" czyli a href tworzą hyperlinki xd ?

tag.MerageAttribute("href", pageUrl(i)); 

o co chodzi w tej linijce

 tag.InnerHtml = i.ToString();
somekind napisał(a):

Dodatkowo, obecnie wybrana strona (CurrentPage) otrzymuje dodatkową klasę CSS selected.
no i jeszcze tutaj nie rozumiem poco ta klasa i co to znaczy selected. I to wszystko chyba czego nie wiem.

2

Tak wygląda link w HTML:

<a href="www.system.com/page/1" class="selected">1</a>

Po kolei:
1)

TagBuilder tag = new TagBuilder("a");

Mamy:

<a></a>
tag.MergeAttribute("href", pageUrl(i));

Mamy:

<a href="www.system.com/page/1" ></a>
tag.InnerHtml = i.ToString();

Mamy:

<a href="www.system.com/page/1" >1</a>
tag.AddCssClass("selected");

Mamy:

<a href="www.system.com/page/1" class="selected">1</a>
RideorDie napisał(a):

no i jeszcze tutaj nie rozumiem poco ta klasa i co to znaczy selected. I to wszystko chyba czego nie wiem.

selected to nazwa klasy CSS.
Wiesz w ogóle co to jest HTML i CSS?

1 użytkowników online, w tym zalogowanych: 0, gości: 1