Enable razor runtime compilation что это
Обновлено: 02.07.2024
Больше всего Razor Pages подходят для создания небольших приложений.
После создания проект будет иметь следующую структуру:
По умолчанию в папке Pages имеются следующие файлы:
_Layout.cshtml : мастер-страница, в которую вставляются страницы Razor
_ViewStart.cshtml : задает мастер-страницу
_ViewImports.cshtml : определяет директивы Razor, которые добавляются на каждую страницу Razor
_ValidationScriptsPartial.cshtml : частичное представление, которое подключает js-скрипты валидации на стороне клиента
Index.cshtml , Error.cshtml и Privacy.cshtml : собственно страницы Razor, которые определяют визуальную часть страницы и логику обработки запроса.
Подключение Razor Pages
Для подключения сервисов Razor Pages применяется метод AddRazorPages . Например, во вновь созданном проекте мы можем увидеть в классе Startup в методе ConfigureServices подключение Razor Pages:
В действительности Razor Pages работают поверх фреймворка MVC, поэтому мы можем подключить и с помощью метода AddMvc() :
Однако AddMvc() подключает в целом всю возможную функциональность фреймворка MVC, в том числе возможность использования контроллеров с представлениями. Если мы не собираемся использовать контроллеры, то логично подключать Razor Pages с помощью метода AddRazorPages() .
Маршрутизация в RazorPages
Непосредствено для связи с Razor Pages применяется метод endpoints.MapRazorPages() . В остальных аспектах класс Startup не отличается от того, что мы имеем в проекте MVC.
В итоге строка запроса URL будет сопоставляться с определенной страницей Razor на основании ее расположения в проекте в папке Pages. Примеры строк URL и сопоставленных с ними страниц:
Путь к странице
/Store или /Store/Index
Обработка запросов
В начале идет директива @page , которая по сути и делает обычное представление страницей Razor. Эта директива позволяет страницам обрабатывать запросы напрямую без контроллеров.
Следующая директива - @model определяет модель представления - в данном случае класс IndexModel.
С этой страницей связан файл кода Index.cshtml.cs :
Модель страницы наследуется от класса PageModel. Данная модель определяет переменную _logger , в которую в конструкторе через механизм Dependency Injection передается класс логгера для осуществления логгирования.
Кроме того, в классе модели определен метод OnGet . Этот метод обрабатывает GET-запросы. В данном случае он пуст.
Запустим проект на выполнение. Фактически страницы Razor могут обрабатывать запросы так же, как и контроллеры. Например, обратимся к Index.cshtml и для этого введем адрес /Index :
Поскольку страница Index.cshtml по умолчанию сопоставляется с корнем приложения, то для обращения к ней можно не указывать Index.
Подобным образом для обращения к странице Privacy надо перейти по адресу /Privacy .
Новый движок представлений, над которым мы работаем, оптимизирован под генерацию HTML-кода, фокусируясь на коде шаблона. Кодовое имя для данного движка – “Razor”, первая бета-версия будет доступна уже скоро.
Цели разработки
Выбор и Гибкость
Hello World и Razor
Razor позволяет вам начать со статического HTML (или любого текстового содержимого), далее делая его динамическим, добавляя серверный код. Одна из основных целей проектирования Razor’a, была предоставить гибкий процесс кодирования и позволить быстро интегрировать серверный код в HTML-разметку с минимумом усилий.
Как это выглядит при использовании .ASPX кода
Хотелось бы поделится одним наблюдением для данного примера – каждая область кода, требует 5 символов (<%= %>) для начала и конца последовательности кода. Некоторые из данных символов (в особенности клавиша %, которая на большинстве клавиатур располагается в верхней центральной части) не совсем просто набирать.
Как это выглядит с Razor синтаксисом
Обратите внимание на начало области кода в Razor, где используется символ @. В отличии от <% %>, Razor не требует от вас явно закрывать область кода:
Даже в таком тривиальном “hello world” примере мы уберегли себя от 12 лишний нажатий клавиш, которые нам пришлось бы делать раньше. Набрать символ @ на клавиатуре гораздо проще, чем символ %.
Циклы и вложенный HTML
Давайте рассмотрим другой случай, когда вам нужно вывести список продуктов (и цену напротив каждого):
Создаем пример с .ASPX
Создаем пример с Razor
Ниже я покажу, как сгенерировать эквивалентное представление, используя Razor:
Razor так же достаточно умен, чтобы распознать @p.Name и @p.Price выражения внутри элемента <li>, как серверный код и выполнить его для каждого прохода цикла. Обратите внимание, Razor автоматически закрывает области кода @p.Name и @p.Price основываясь на совместном использовании HTML и кода.
Возможность писать код таким образом, не требуя добавлять множество открывающих и закрывающих меток по всему шаблону делает весь процесс разработки реально быстрым.
Блоки if и многострочные выражения
Ниже представлено несколько примеров распространенных ситуаций:
If выражения
Многострочные выражения
Вы можете обозначать несколько строчек кода обернув их в блок @< код > следующим образом:
Обратите внимание, что переменные могут быть разбиты на несколько серверных блоков кода, переменная “message” объявлена в многострочном блоке @< >, а также использована в блоке кода message. Точно так же, как и в синтаксисе .aspx файлах <% %> и <%= %>.
Комплексные выражения
Синтаксис @( ) позволяет размещать комплексные выражения. Например, мы можем переписать выше указанный код для конкатенации строки и числа вместе, внутри блока @ ( код ):
Интеграция содержимого и кода
Парсер Razor знает множество особенностей языка, позволяя полностью доверится ему, а не проводить время за собственной реализацией.
Конфликтует ли он с email-адресами и другими местами использования @ в HTML?
Парсер Razor достаточно умен, чтобы в большинстве случаев определить, используется ли символ @ в коде или в статическом содержимом. Например, ниже я используя символ @, как часть email-адреса:
В случае, где содержимое валидно, как код, а вы хотите вывести его как статическое, достаточно явно указать два символа @@ вместо одного.
Определение вложенного содержимого
Размещая HTML-содержимое внутри if/else, foreach или других блочных выражений, следует обернуть внутреннее содержимое HTML или XML элементов для лучшего определения начала области содержимого.
Например, ниже, я обернул многострочный блок содержимого (который включает в себя фигурные скобки) в тег <span>:
Это сгенерирует следующий код для клиента, включая элемент <span>:
По желанию, вы можете обернуть вложенное содержимое в блок <text> в случаях, когда ваши данные должны сгенерироваться для клиента без тега обвертки:
Данный код сгенерирует ниже представленное содержимое для клиента, обратите внимание – никаких обворачивающих тегов:
Кодирование HTML
По умолчанию содержимое, использующее блок @ автоматически HTML-кодированно для улучшенной защиты против XSS атак.
Макет/MasterPage — Основы
Простейший пример макета
Ниже представлен простой пример страницы макета, которое мы сохраним под названием “SiteLayout.cshtml”. Он может содержать любой статический HTML, а также любой динамический серверный код. Далее добавим вызов вспомогательного метода “RenderBody()” в том месте, где мы хотим вывести определённое тело содержимого для запрашиваемого URL:
Далее мы можем создать шаблон представления, назвав его “Home.cshtml”, которое содержит только нужный код или содержимое для построения определенного тела запрашиваемой страницы и основывается на шаблоне макета:
Когда мы сгенерируем Home.cshtml, как шаблон представления, он объединит содержимое макета и под-страницы, и отошлет содержимое клиенту:
Компактный, чистый и выразительный код
Хотелось бы обратить внимание на код выше и заметить, что определение макета и его использование из представлений/страниц имеет маленький размер. Код на скриншоте содержит все содержимое SiteLayout.cshtml и Home.cshtml файлов, нет никаких дополнительных настроек или тегов, нет префикса %@Page % и другой различной разметки или заданных свойств.
Мы стараемся держать код, который вы пишете, в наиболее компактном и простом виде. Мы также хотим позволить любому открывать файлы в сторонних текстовых редактора и изменять код. Не требуется никакой дополнительной генерации кода или intellisense.
Макет/MasterPage – Добавляем заменяемые части
Макет страниц поддерживает возможность определять внутри различные “секции”, которые могут изменять представления собственным содержимым. Это позволяет вам с легкостью изменять/заполнять прерывающиеся секции содержимого на странице макета и предоставляет гибкость макета для вашего сайта.
Так как две секции помечены, как “optional”, я не обязан определять их в моем Home.cshtml файле. Мой сайт продолжает прекрасно работать, даже если их там нет.
Давайте вернемся обратно в Home.cshtml и объявим собственные части Menu и Footer. Скриншот ниже, содержит весь код Home.cshtml, больше ничего не потребуется. Однако, я перенес настройки LayoutPage на глобальный уровень, так что их здесь больше нет.
Наши собственные секции перезаписывают “menu” и “footer” с помощью объявленных в файле блоков @section. Мы решили не требовать обвертывать содержимое “main/body” внутри секции, а вместо этого просто оставить её в строковом виде (это позволяет сократить количество нажатий и позволит с легкостью добавлять секции на страница макета, не требуя пробегаться по всем страницам изменяя их синтаксис)
Когда мы снова сгенерируем Home.cshtml как шаблон представления, он объединит содержание макета и под-страницы, интегрируя две новых части страницы и вернет клиенту следующее:
Инкапсуляция и повторное использование HTML-помощников
Мы рассмотрели, как обеспечить единый вид веб-сайта, используя страницы макета. Давайте теперь рассмотрим, как создавать повторно используемые HTML-вспомогательные методы, которые дают нам чистую инкапсуляцию для генерации HTML, и которые мы можем использовать в нашем сайте или даже в рамках нескольких разных сайтов.
Программные HTML-помощники
Декларативные HTML-помощники
Генерация HTML на основе одного класса кода работает, но не является идеальной.
Одной из возможностей в Razor является простой путь для создания повторно используемых HTML-помощников, используя более декларативный подход. Наш план заключается в том, чтобы дать вам возможность объявлять повторно используемые помощники с помощью декларативного синтаксиса helper < >, как показано ниже.
Вы сможете размещать .cshtml файлы, которые содержат данные помощники в директории Views\Helpers и в последствии заново использовать их в любом представлении или странице на вашем сайте (никаких дополнительных действий не потребуется):
Обратите внимание, как помощник ProductListing() определяет аргументы и параметры. Вы можете передавать любые параметры, какие захотите (включая необязательные параметры, типы допускающие значения NULL, генерики и т.п.). Вы так же сможете отлаживать данный код в Visual Studio.
Важно: helper синтаксис не будет доступен в первой бета-версии Razor, мы надеемся он будет доступен в следующих версиях. Вспомогательные методы оформленные в виде кода, будут работать сразу.
Передача строковых шаблонов, как параметров
Другая полезная (и нереально мощная) возможность, которую мы предоставляем с Razor – это возможность передавать “строковые шаблонные” параметры во вспомогательные методы. Данные “строковые шаблоны” могут содержать в себе, как HTML, так и код, и могут быть вызваны по требованию вспомогательного метода.
Ниже вы видите пример данной функциональности в действии, я использую HTML-помощник “Grid”, который генерирует DataGrid для клиента:
Параметр “format”, который мы передаем, когда объявляем столбец, является “строчным шаблоном”, он содержит и html и код, мы также можем настроить под себя формат данных. А самое прекрасное – это что помощник Grid’a может вызывать наш строчный шаблон, как метод делегата, и может вызывать его, когда нужно и сколько раз хочет. В данном случае он будет вызывать каждый раз, когда он генерирует строку грида и передает в “элемент”, который может использовать наш шаблон для отображения результата.
Данная возможность позволит разрабатывать более мощные HTML-вспомогательные методы. Вы сможете реализовывать их, как в коде (так вы это делаете сегодня), так и используя декларативный подход helper< >.
Поддержка в Visual Studio
Как я уже замечал ранее, одной из основных целей Razor – минимизировать количество нажатий клавиш, а также легко редактировать код любым текстовым редактором. Мы постарались держать синтаксис чистым, компактным и простым.
Обратите внимание, каким образом отработал intellisense для объекта Product на “ @p.”, внутри элемента <li>. Заметьте, в Solution Explorer в папке \Views присутствуют оба шаблона представлений .aspx и .cshtml. Вы можете использовать различные движки представлений в одном приложении, давая возможность прочувствовать, какой синтаксис вам по душе.
Выводы
Все разработчики, которые тестировали проект последние несколько месяцев, оставили крайне позитивные отзывы. Мы собираемся предоставить публичную бета-версию, как можно скорее и конечно же ожидаем услышать ваше мнение.
- Запустите приложение Asmwsoft Pc Optimizer.
- Потом из главного окна выберите пункт "Clean Junk Files".
- Когда появится новое окно, нажмите на кнопку "start" и дождитесь окончания поиска.
- потом нажмите на кнопку "Select All".
- нажмите на кнопку "start cleaning".
- Запустите приложение Asmwsoft Pc Optimizer.
- Потом из главного окна выберите пункт "Fix Registry problems".
- Нажмите на кнопку "select all" для проверки всех разделов реестра на наличие ошибок.
- 4. Нажмите на кнопку "Start" и подождите несколько минут в зависимости от размера файла реестра.
- После завершения поиска нажмите на кнопку "select all".
- Нажмите на кнопку "Fix selected".
P.S. Вам может потребоваться повторно выполнить эти шаги.
- Нажмите правой кнопкой мыши на «Мой компьютер» на рабочем столе и выберите пункт «Свойства».
- В меню слева выберите " Advanced system settings".
- В разделе «Быстродействие» нажмите на кнопку «Параметры».
- Нажмите на вкладку "data Execution prevention".
- Выберите опцию " Turn on DEP for all programs and services . " .
- Нажмите на кнопку "add" и выберите файл microsoft.aspnet.razor.runtime.precompilation.dll, а затем нажмите на кнопку "open".
- Нажмите на кнопку "ok" и перезагрузите свой компьютер.
Всего голосов ( 181 ), 115 говорят, что не будут удалять, а 66 говорят, что удалят его с компьютера.
Вы не смогли дозвониться до нас или ограничены во времени. Просто сообщите номер телефона, предпочтительное время звонка и тематику разговора, и наши специалисты обязательно свяжутся с Вами.
Расход воздуха, м3/мин | 2,3-9,6 |
Давление, бар | 10 |
Производительность, м2/час | до 37 |
Габариты, мм | 508x1226 |
Объем бункера, л | 100 |
Вес, кг | 110 |
Аппарат Razor Z-100 RCS с дистанционным управлением и дозатором SGV предназначен для пескоструйной очистки металлических конструкций и сооружений, бетонных поверхностей.
Технические характеристики:
- Степень очистки до SA-3,0;
- Производительность до 37 м2/ч (смотри таблицу производительности);
- Предназначен для работы с любым сухим песком фракцией до 3,5 мм;
- Рабочая температура: от -10 до +50°C.
Стандартный комплект поставки:
- бак на 100 литров,
- сито,
- крышка,
- дозатор SGV;
- расходный вентиль абразива,
- высокоэффективный фильтр влаго-маслоотделитель;
- удобная ревизия;
- обрезиненные фитинги и трубная арматура;
- блок дистанционного управления (ДУ):
- вентиль ДУ,
- пульт ДУ,
- 20 м сдвоенного рукава ДУ,
- набор фитингов.
Аппарат Contractor Razor Z-100 RCS оборудован эффективным воздушным фильтром-влагомаслоотделителем CAF-3, который не допускает попадание в бак конденсата и масел от компрессора.
Все участки фитингов и трубной арматуры, контактирующие с проходящим потоком абразива, обрезинены, благодаря чему значительно снижается износ, а также необходимость в сложном ремонте по замене данных участков.
Вентиль ДУ / Сдвоенный рукав ДУ / Пульт ДУ
Читайте также: