Одним из нововведений первой версии 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, не вызовет никаких затруднений.
Если у вас остались вопросы, свяжитесь с нами.
By using this website, you agree to the use of cookies for analytics and personalized content. Cookies store useful information on your computer to help us improve efficiency and usability. For more information, please read the privacy policy and cookie policy.