Одним из нововведений первой версии Stimulsoft Reports and Dashboards 2023 года стала поддержка работы с Razor Pages в продуктах Reports.WEB и Dashboards.WEB. В этой статье расскажем об этом подробнее.

Что такое 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, не вызовет никаких затруднений.
Если у вас остались вопросы, свяжитесь с нами.
Используя этот сайт, вы соглашаетесь на использование файлов Cookie для аналитики и персонализированного контента. Файлы Cookie хранят полезную информацию на вашем компьютере, чтобы помочь нам повысить эффективность и удобство использования. Для получения дополнительной информации, пожалуйста, прочтите Конфиденциальность и Использование Cookie.