Mvc 5, робота з razor в поданні

У попередній статті ми мали можливість створити спеціальний механізм візуалізації, реалізувавши лише два інтерфейси. Слід визнати, що в кінцевому підсумку ми отримали просте подобу механізму, який генерував досить незграбні уявлення, але зате ви побачили, що концепція розширюваності MVC підтримується протягом усього конвеєра обробки запитів.

Складність в механізм візуалізації привноситься системою шаблонів уявлень, яка включає фрагменти коду, підтримує компонування і скомпільована для оптимізації продуктивності. Ми не робили нічого подібного в своєму простому механізмі візуалізації, і за великим рахунком не повинні це робити, тому що про все подбає механізм Razor.

приклад програми

Ми створили новий проект MVC на ім'я WorkingWithRazor з використанням шаблону Empty (Порожній) і відміткою прапорця MVC в розділі Add folders and core references for (Додати папки і основні посилання для). У проект доданий контролер Home, код якого показаний в прикладі:

Крім того, в папці / Views / Home створено уявлення по імені Index.cshtml. Вміст цього файлу уявлення наведено нижче:

Візуалізація уявлень Razor

Mvc 5, робота з razor в поданні

в системах Windows 7 і Windows 8.

Знаходження файлу коду, згенерованого для конкретного уявлення, вимагає певної уваги. Звичайно є безліч папок із загадковими іменами, до того ж імена файлів .cs не відповідають іменам містяться в них класів. Наприклад, клас, згенерований для подання з прикладу вище, був виявлений в файлі на ім'я "App_Web_o0mtztby.0.cs" всередині папки "root \ 321dfcd8 \ 64cbe7dd". У прикладі нижче наведено злегка упорядкований код цього класу:

Насамперед зверніть увагу, що клас є похідним від WebViewPage. де T - це тип моделі (WebViewPage в розглянутому прикладі). Подібним чином підтримуються строго типізовані уявлення. Крім того, погляньте на ім'я згенерованого класу - _Page_Views_Home_Index_cshtml. Як бачите, в імені класу закодований шлях до файлу уявлення. Таким способом Razor відображає запити до уявленням на екземпляри скомпільованих класів.

У методі Execute () проводиться обробка операторів і елементів уявлення. Фрагменти коду, упереджені символом виражаються безпосередньо як оператори C #. Елементи HTML обробляються за допомогою методу WriteLiteral (). який записує вміст параметра в результат в тому вигляді, як він заданий. Це відрізняється від методу Write (), який використовується для змінних C # і кодує строкові значення для безпечного застосування на HTML-сторінці.

Методи Write () і WriteLiteral () записують вміст в об'єкт TextWriter. Це той же самий об'єкт, який передається методу IView.Render (), як було показано в попередній статті. Мета скомпільованої уявлення Razor полягає в генерації статичного і динамічного вмісту і відправка його клієнту через TextWriter. Про це корисно пам'ятати, коли будуть розглядатися допоміжні методи HTML.

Конфігурація розташування для пошуку уявлень

При пошуку уявлення механізм візуалізації Razor слід стандартному угодою. Наприклад, в разі запиту уявлення Index, асоційованого з контролером Home, механізм Razor переглядає наступний список уявлень:

Як вам уже відомо, Razor в дійсності не шукає файли представлень на диску, оскільки вони вже скомпільовані в класи C #. Механізм Razor шукає скомпільовані класи, які відповідають цим уявленням. Файли .cshtml - це шаблони, що містять оператори C #, а файли .vbhtml містять оператори Visual Basic.

Щоб змінити файли представлень, які шукає Razor, можна створити підклас класу RazorViewEngine. Зазначений клас є реалізацією інтерфейсу IViewEngine в Razor. Він побудований на серії базових класів, які визначають набір властивостей, що вказують на те, які файли представлень будуть шукатися. Ці властивості описані в таблиці нижче:

Властивості механізму візуалізації Razor, пов'язані з пошуком уявлень