Что такое Razor Pages?
Функционал Razor Pages появился на платформе ASP.NET Core ещё в 2019 году. По сути, Razor Page – это страница, состоящая из стандартной разметки и бэкенд-класса, который одновременно выступает моделью и контроллером. Данный функционал позволяет создавать страницы с кодом Razor и обрабатывать запросы. Другими словами, Razor Pages – это близкий аналог веб-форм, они представляют собой альтернативное решение для создания приложений, в первую очередь, небольших.Что изменилось?
Для наших ASP.NET Core-компонентов, входящих в состав продуктов Reports.WEB и Dashboards.WEB появилась возможность создавать веб-приложения и проекты с использованием Razor Pages. В созданных проектах будут доступны все инструменты создания, отображения, преобразования отчетов и дашбордов. Доступны все уже существующие опции компонентов и настройки их внешнего вида, возможность построения и экспортирования отчета при помощи кода на стороне сервера.Пример работы
До версии 2023.1, наши компоненты для ASP.NET Core работали только с использованием MVC-технологии, которая, естественно, имеет свои плюсы и минусы. Для сравнения, чтобы отобразить компонент на веб-странице с использованием MVC, нужно было определить разметку компонента и его опции на View, затем определить все необходимые действия в Controller, при необходимости нужно было определить структуру данных в Model:View:
@Html.StiNetCoreViewer(new StiNetCoreViewerOptions()
{
Actions =
{
GetReport = "GetReport",
ViewerEvent = "ViewerEvent"
}
})
Controller:
public IActionResult GetReport()
{
var report = new StiReport();
report.LoadDocument(StiNetCoreHelper.MapPath(this, "Reports/SimpleList.mdc"));
return StiNetCoreViewer.GetReportResult(this, report);
}
public IActionResult ViewerEvent()
{
return StiNetCoreViewer.ViewerEventResult(this);
}
При использовании технологии Razor Pages, весь код может быть размещен на одной странице, а вместо действий контроллера определяются события для GET и POST запросов. Например, тот же код развертывания нашего компонента выглядит следующим образом:
@Html.StiNetCoreViewer(new StiNetCoreViewerOptions()
{
Actions =
{
GetReport = "GetReport",
ViewerEvent = "ViewerEvent"
}
})
public IActionResult OnPostGetReport()
{
var report = new StiReport();
report.LoadDocument(StiNetCoreHelper.MapPath(this, "Reports/SimpleList.mdc"));
return StiNetCoreViewer.GetReportResult(this, report);
}
public IActionResult OnGetViewerEvent()
{
return StiNetCoreViewer.ViewerEventResult(this);
}
public IActionResult OnPostViewerEvent()
{
return StiNetCoreViewer.ViewerEventResult(this);
}
Код для Razor Pages имеет очень похожую структуру, но существует ряд отличий:
- Вместо действий используются события обработки запросов;
- Вместо контроллера на вход результирующих функций передается объект страницы;
- В качестве названия события используется стандартный префикс типа запроса OnGet либо OnPost, и заданное в настройках компонента имя события.
Как и для MVC-технологии, результирующая функция возвращает необходимый ответ, в зависимости от требуемого события вьювера. Поэтому, в целом, работа компонента осталась неизменной, и он в одинаковой мере поддерживает сразу две технологии.
Дополнительная информация
Мы постарались максимально упростить развертывание компонента, и сохранить совместимость с предыдущими версиями, поэтому не требуется больших изменений кода для перехода на Razor Pages. Мы обновили документацию и добавили множество примеров. Мы очень надеемся, что всё это значительно упростит интеграцию компонентов в ваше приложение, а в случае перехода с MVC на Razor Pages, не вызовет никаких затруднений.Если у вас остались вопросы, свяжитесь с нами.