ПредишенСледващото

В тази статия ще разгледаме помощник методи, които позволяват на опаковки част на програмата и за маркиране, така че да могат да се използват повторно в рамките на ASP.NET MVC Framework заявлението. Започваме с факта, че ние ще покажем как да създадете свои собствени помощник методи.

примерни приложения

За целите на тази статия във Visual Studio създаде нов проект, наречен MVC HelperMethods с помощта на шаблон Empty (Blank) и MVC кутии марка в Добавяне на папки и основни препоръки за добавки (папки и основни връзки). В проекта на контролера добавена Home, код на която е показано в примера по-долу:

Методът стъпки индекс () изображение се предава чрез чифт масиви низ обект ViewBag, и както е посочено модели тип обект низ. В папка / Views / Начало е създаден подаване файл Index.cshtml със съдържанието, посочени в примера по-долу. Тя е силно въвели представителство (вид модел низ) и тя не се прилага оформлението.

За да видите как се изобразява тази гледна точка, че е необходимо да стартирате приложението. се добавя Standard конфигурация маршрутизация в Visual Studio проект, който показва URL адреса на корена, се изисква автоматично от браузъра, на действието на Индекса в контролер дома:

MVC 5, специални методи за помощни

Създаване на специални помощник методи

Ние ще обясним подробно работата на помощник методи чрез създаване на своя собствена реализация. Две различни подходи към създаването на специални помощник методи са показани в следващите раздели.

Създаване на вградения метод помощник

Най-простият метод е вид спомагателни вдлъбната спомагателен метод, който се определя в рамките на изгледа. Ние можем да създадем метод приставка помощник за опростяване на нашето разбиране за пример, като се използва @helper дръжка. както е показано в примера по-долу:

Подобно на обикновените C # методи, методи вградени помощни имат имена и параметри. В този пример, спомагателен метод име ListArrayStringItems () се определя, че приема параметър низ масив. Въпреки че извитата спомагателен метод прилича на метода, стойността на връщане отсъства. Съдържанието на спомагателната тялото на метода се обработват и се поставят в отговора, предназначени за клиента.

Имайте предвид, че когато използвате вградения помощен метод води ViewBag не се изисква динамични характеристики на даден обект в низ масив. Една от характеристиките на това разнообразие от методи за комунални услуги, свързани с вида на оценка по време на изпълнение.

В тялото на вградения спомагателен метод използва същия синтаксис като в останалата част на самобръсначката представяне. Буквални струни, се третират като статичен маркиращ HTML, и оператори, които изискват Razor обработка механизъм, префикса на символа @. Helper метод в Пример смеси статичен HTML маркиране и бръснач дръжки за прехвърляне на масива, в резултат на същата мощност като първоначалната идея, но това намалява дублирането в представянето.

Предимството на този подход е, се дължи на факта, че ако искате да промените начина, по който да се покаже съдържанието на масив, то ще трябва да направите, на едно място. Като прост пример, в примера, показан по-долу, а не просто двете изходни стойности се прилагат елементи неподреден списък HTML:

Промените трябва да се направи само едно място. Това може да изглежда малко предимство в семпъл дизайн, но това е удобен начин да се запази идеи опростен и хармонизиран в реален проект. В резултат на направените промени е показан по-долу:

MVC 5, специални методи за помощни

Имайте предвид, че в горния пример, foreach ключова дума трябва да се предхожда с @, но в примера по-горе, това все още не е така. Причината за това е, че първият елемент в метода на тялото помощник е бил променен, за да бъде HTML-елемент, което означава, че е необходимо да се използва символа @ да докладва механизъм Razor за използването на C # оператор. В предишния пример не е имало HTML-елементи, така че Razor механизъм предполага, че съдържанието е код. Такива малки инструменти функции за анализ може да бъде трудно да се проследят, но за щастие, Visual Studio сряда марка този вид грешка.

Създаване на външен метод за помощник

Вградените помощник методи са удобни, но те са само в рамките на може да се използва на мнение, които са обявени, а ако такива методи включват много код, представителството става трудно да се чете.

Една алтернатива е да се създаде метод за външен спомагателни HTML, който се изразява в разширяване C # метод. Външни помощник методи могат да бъдат по-широко използвани, но те са малко по-неудобно в писмен вид, като в C # не поддържа генерирането на елегантни HTML-елементи. За да се покаже тази функция в проба проект добавя папка инфраструктура, която поставя нов клас файл с име CustomHelpers.cs:

метод помощник установено тук изпълнява същата функция като на вградения спомагателни метода от предходния пример - той получава масив от низове и генерира HTML-елемент

    , елемент, съдържащ
  • за всеки ред в масива.

    Първият параметър на метод външен HTML помощник е HtmlHelper обекта. предвкусване на тази ключова дума, за да кажа, C # компилатор, който се определя чрез разширяване C # метод на. HtmlHelper обект осигурява достъп до информация, която може да е от полза при създаването на съдържание чрез функции, описани в таблицата по-долу:

    Полезните свойства, определени в HtmlHelper клас

    Връща инстанция на изпълнението на IView, от която се нарича допълнителната метода

    Информация, която може да бъде получена при поискване, е по-скоро широка, но повечето от методите на помощни са прости и се използва, за да се гарантира последователното форматиране. Можете да използвате вградените помощник методи за генериране на специфични искания за съдържание (тези методи ще бъдат обсъдени в следващата статия) и частични сведения или филиали на действие за решаване на по-сложни проблеми.

    TagBuilder нов екземпляр е създаден с прохода конструктор като параметър името на HTML-елемент, който трябва да бъде построен. Когато се използва ъгъл клас TagBuilder скоби (<и>) Не е необходимо, т.е. елемент

      , например, може да се създаде, както следва:

      Най-полезните членовете TagBuilder клас са описани в таблицата по-долу:

      Полезни методи и свойства, определени в TagBuilder клас

      Метод или имущество

      Имотът, който ви позволява да го настроите като съдържание HTML Онлайн елемент. Стойността определен за това свойство не се кодира, т.е. чрез HTML-свойства на елементите могат да бъдат вложени

      Задава текстовото съдържание на HTML-елемент. параметричен низ кодиран да направи съдържанието на сейфа, за да изведете

      MergeAttribute (стринг, низ, булев)

      Добавя атрибут на HTML-елемент. Първият вариант - това е името на атрибута, а втората - нейната стойност. Използвайте параметъра булев показва дали да се заменят с съществуващ атрибут със същото име

      Резултатът е HTML помощник метод MvcHtmlString обект на. чието съдържание е написано директно в отговор, предназначен клиент. В този пример, спомагателни резултат повикване метод TagBuilder.ToString на () се предава на нов обект конструктор MvcHtmlString, както е показано по-долу:

      Този фрагмент оператор генерира HTML-маркиране елементи, който съдържа

        и
      • , и връща да изображения механизъм в отговор на вмъкване.

        Използването на специални външни спомагателни метод

        Специален метод външен помощник се използва малко по-различно, отколкото вградения метод. Примерът по-долу показва промени в /Views/Home/Index.cshtml подават да замени вградения спомагателни външна метод:

        Трябва да се гарантира, че именно пространство находка, която включва допълнителен метод разширяване на обхвата. Това се прави с помощта на @using дръжка. но ако са разработили много специални помощник методи, че има смисъл да ги добавите, съдържащ пространство от имена /Views/Web.config файл, така че те винаги са налице в изгледа.

        Данните се предават метод помощник, като че ли са били вградени метод или C #, въпреки че трябва да се внимава, за да се приведат в съответствие динамични свойства на обекта, за да вид ViewBag определено външен помощен метод, който в този случай е низ масив. Синтаксисът не е толкова елегантен, както се използва за вградени помощник методи, но това е част от цената, която трябва да плати за възможността да се създаде метод помощник, което позволява използване във всеки изглед на проекта.

        Кога да използвате помощник методи?

        Сега, че знаете как да работят помощник методи, има един разумен въпрос: кога да ги използвате вместо частичните сведения или дете дейности, особено с оглед на факта, че функционалността те подкрепят припокриват?

        Аз използвам помощни методи само за да се намали обемът на дубликат код и маркиране, на представителствата, както беше направено в горния пример, и само поради простата съдържание. За по-сложно оформление и съдържанието използвам частично представителство, и ако е необходимо да се извършва всякаква манипулация на модела на данни, дейностите на детето. Аз препоръчвам залепване с един и същ подход и да се опита да запази методите за помощни толкова просто, колкото е възможно. (Ако ми помощник методи съдържат повече от пет оператори C # C # или повече оператори, отколкото HTML-елементи, предпочитам частична гледка.)

        кодираща контролни линии в под-метода

        ASP.NET MVC Framework инфраструктура осигурява защита от злонамерени данни, автоматично ги криптирате, така че те могат безопасно да бъдат добавени към HTML-страница. Пример за такова кодиране може да се види в прилагането на контролера Начало под внимание, когато представянето като модела на обекта се прехвърля потенциално ненадеждна ред:

        Този обект модел съдържа валиден HTML-елемент, но когато стойността се визуализира Razor, получаваме следния HTML-маркиране:

        демонстрационни проблеми

        За да се демонстрира проблема, CustomerHelpers клас създаде нов метод помощник, както е показано в примера по-долу:

        Този метод помощник приема низ като параметър, и генерира една и съща HTML-маркировка, която е включена в Индекса на представителство. Използване String.Format () метод се генерира HTML-слот, който се предава като аргумент да MvcHtmlString на конструктор. Следващият пример показва промените в представителството /View/Home/Index.cshtml да използват нов спомагателен метод (в допълнение, също така се прави промяна на извличане на съдържанието, която получава от този спомагателен метод):

        Изпълнението на приложението, в резултат на нов метод помощник може да се види:

        MVC 5, специални методи за помощни

        Дъщерно доверен метод за генериране на защитено съдържание, което, за съжаление, в браузъра ви ще се показва на елемента , и това поведение може да се използва от хакери, за да се прекъсне приложението.

        Кодиране на съдържанието помощник метод

        Има няколко начина, можете да използвате, за да реши този проблем, както и избора на един от тях, зависи от естеството на съдържанието, генерирано от дъщерното дружество. Най-простото решение включва промяна на начина на връщане тип помощник на низа, както е показано в примера по-долу. Това предотвратява модул за визуализация, че съдържанието не е безопасно и трябва да се кодират, преди да бъде добавена в презентацията:

        Този метод води до факта, че Razor ще кодира цялото съдържание върнати от вторичен метод, което води до проблем в ситуация, в която генерира HTML-елементи (в този пример), но е много удобно в други случаи. Резултатът може да се види по-долу:

        MVC 5, специални методи за помощни

        Проблемът с елемента решен, но елементите

        Също така тя е кодирана, че не се вписва. В такива ситуации изискват по-голяма селективност за кодиране само стойности на данните. Следният пример илюстрира как да направите това:

        Класът на HtmlHelper определя метод например име Възхвала (). който решава проблема и кодира низ, така че да могат безопасно да бъдат включени в презентацията. Проблемът с тази техника, е фактът, че не трябва да забравяте да го използвате. Всички стойности на данни са изрично кодирани в началото на метода и за напомняне, този подход е по-предпочитан.

        Резултатът показва промени, описани по-долу:

        MVC 5, специални методи за помощни

        Тук се вижда, че съдържанието генерирани от външната помощно съвпада със съдържанието, генерирани чрез използване на модел стойности директно в представителството.

        Свързани статии

Подкрепете проекта - споделете линка, благодаря!