This example shows how to integrate the report viewer and report designer into an application. Let's start from viewer. First, import scripts:
using Stimulsoft.Report;
using Stimulsoft.Report.Angular;
using Stimulsoft.Report.Mvc;
using Stimulsoft.Report.Web;
...
Next, initialize the viewer:
...
public ActionResult InitViewer()
{
	var requestParams = StiMvcViewer.GetRequestParams();
	var options = new StiAngularViewerOptions();
	options.Actions.GetReport = "GetReport";
	options.Actions.ViewerEvent = "ViewerEvent";
	options.Appearance.ScrollbarsMode = true;
	options.Toolbar.ShowDesignButton = true;
	return StiAngularViewer.ViewerDataResult(requestParams, options);
}
...
After that, load a report:
...
[AllowCrossSiteJson]
public ActionResult GetReport()
{
	var report = StiReport.CreateNewReport();
	var path = Server.MapPath($"~/Reports/MasterDetail.mrt");
	report.Load(path);
	return StiAngularViewer.GetReportResult(report);
}
...
Finally, process other viewer requests:
...
[AllowCrossSiteJson]
public ActionResult ViewerEvent()
{
	return StiAngularViewer.ViewerEventResult();
}
...
Now, let's continue with designer. First, import scripts:
using Stimulsoft.Report;
using Stimulsoft.Report.Mvc;
using Stimulsoft.Report.Web;
...
Next, initialize the designer:
...
[AllowCrossSiteJson]
public ActionResult Get()
{
	var requestParams = StiMvcDesigner.GetRequestParams();
	if (requestParams.Action == StiAction.Undefined)
	{
		var options = new StiMvcDesignerOptions();
		return StiMvcDesigner.GetAngularScriptsResult(requestParams, options);
	}
	if (requestParams.ComponentType == StiComponentType.Designer)
	{
		switch (requestParams.Action)
		{
			case StiAction.GetReport:
				return GetReport();
			case StiAction.SaveReport:
				return SaveReport();
		}
	}
	return StiMvcDesigner.ProcessRequestResult();
}
		
...
After that, load a report:
...
public ActionResult GetReport()
{
	var report = StiReport.CreateNewReport();
	var path = Server.MapPath("~/Reports/MasterDetail.mrt");
	report.Load(path);
	return StiMvcDesigner.GetReportResult(report);
}
...
Finally, create a method to save report:
...
public ActionResult SaveReport()
{
	var report = StiMvcDesigner.GetReportObject();
	var path = Server.MapPath("~/Reports/MasterDetail.mrt");
	report.Save(path);
	return StiMvcDesigner.SaveReportResult();
}
...