У попередній статті ми мали можливість створити спеціальний механізм візуалізації, реалізувавши лише два інтерфейси. Слід визнати, що в кінцевому підсумку ми отримали просте подобу механізму, який генерував досить незграбні уявлення, але зате ви побачили, що концепція розширюваності MVC підтримується протягом усього конвеєра обробки запитів.
Складність в механізм візуалізації привноситься системою шаблонів уявлень, яка включає фрагменти коду, підтримує компонування і скомпільована для оптимізації продуктивності. Ми не робили нічого подібного в своєму простому механізмі візуалізації, і за великим рахунком не повинні це робити, тому що про все подбає механізм Razor.
приклад програми
Ми створили новий проект MVC на ім'я WorkingWithRazor з використанням шаблону Empty (Порожній) і відміткою прапорця MVC в розділі Add folders and core references for (Додати папки і основні посилання для). У проект доданий контролер Home, код якого показаний в прикладі:
Крім того, в папці / Views / Home створено уявлення по імені Index.cshtml. Вміст цього файлу уявлення наведено нижче:
Візуалізація уявлень Razor
в системах Windows 7 і Windows 8.
Знаходження файлу коду, згенерованого для конкретного уявлення, вимагає певної уваги. Звичайно є безліч папок із загадковими іменами, до того ж імена файлів .cs не відповідають іменам містяться в них класів. Наприклад, клас, згенерований для подання з прикладу вище, був виявлений в файлі на ім'я "App_Web_o0mtztby.0.cs" всередині папки "root \ 321dfcd8 \ 64cbe7dd". У прикладі нижче наведено злегка упорядкований код цього класу:
Насамперед зверніть увагу, що клас є похідним від WebViewPage
У методі 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, пов'язані з пошуком уявлень