Skip to main content

Add a Document Viewer to an ASP.NET Core MVC Application

  • 6 minutes to read

This tutorial describes how to integrate the Document Viewer control into an ASP.NET Core MVC web application.

Prerequisites

Important

In .NET 6, the System.Drawing.Common library is compatible with Windows only. An exception is thrown on other platforms. See the following topic for more information: Reporting .NET/.NET Core Limitations.

Create an ASP.NET Core MVC Web Application

  1. Create a new project in Visual Studio and select ASP.NET Core Web App (Model-View-Controller) on the start page as a project template.

    Select ASP.NET Core Web App (Model-View-Controller) template

    Click Next.

  2. Specify the application name (WebApplication1), location, target framework, and other options, and click Create.

Manage Packages and Libraries

Follow the steps below to install NuGet packages:

  1. Right-click Dependencies in the Solution Explorer and select Manage NuGet Packages from the context menu.

    context-menu-manage-nuget-packages

  2. Install the following packages:

    For more information on how to install NuGet packages for DevExpress components, review the following help topic: Choose Between Offline and Online DevExpress NuGet Feeds.

  3. Right-click the project in the Solution Explorer and select Add | New Item from the context menu. Select npm Configuration File in the invoked Add New Item dialog.

    Add npm Configuration File to the Project

    Open the newly created package.json file, replace its content with the following code, and save the file:

    {
        "version": "1.0.0",
        "name": "asp.net",
        "private": true,
        "dependencies": {
            "bootstrap": "^4.3.1",
            "devextreme-dist": "23.2.*",
            "@devexpress/analytics-core": "23.2.*",
            "devexpress-reporting": "23.2.*"
        }
    }
    
  4. Right-click package.json in the Solution Explorer and select Restore Packages. Alternatively, you can execute the following command in the folder that contains the package.json file:

    npm install
    
  5. Add a text file (bundleconfig.json) to the project. Open the newly created file, paste the following content, and save the file:

    [
      {
        "outputFileName": "wwwroot/css/thirdparty.bundle.css",
        "inputFiles": [
          "node_modules/bootstrap/dist/css/bootstrap.min.css",
          "node_modules/devextreme-dist/css/dx.light.css"
        ],
        "minify": {
          "enabled": false,
          "adjustRelativePaths": false
        }
      },
      {
        "outputFileName": "wwwroot/css/viewer.part.bundle.css",
        "inputFiles": [
            "node_modules/@devexpress/analytics-core/dist/css/dx-analytics.common.css",
            "node_modules/@devexpress/analytics-core/dist/css/dx-analytics.light.css",
            "node_modules/devexpress-reporting/dist/css/dx-webdocumentviewer.css"
        ],
        "minify": {
          "enabled": false,
          "adjustRelativePaths": false
        }
      },
    
      {
        "outputFileName": "wwwroot/js/thirdparty.bundle.js",
        "inputFiles": [
          "node_modules/jquery/dist/jquery.min.js",
          "node_modules/knockout/build/output/knockout-latest.js",
          "node_modules/bootstrap/dist/js/bootstrap.min.js",
          "node_modules/devextreme-dist/js/dx.all.js",
          ],
        "minify": {
          "enabled": false
        },
        "sourceMap": false
      },
      {
        "outputFileName": "wwwroot/js/viewer.part.bundle.js",
        "inputFiles": [
          "node_modules/@devexpress/analytics-core/dist/js/dx-analytics-core.min.js",
          "node_modules/devexpress-reporting/dist/js/dx-webdocumentviewer.min.js"
          ],
        "minify": {
          "enabled": false
        },
        "sourceMap": false
      }
    ]
    
  6. Right-click the project in the Solution Explorer and select Manage Client-Side Libraries to open the libman.json file.

    Manage Client-Side Libraries

    Paste the following content and save the file:

    {
      "version": "1.0",
      "defaultProvider": "filesystem",
      "libraries": [
    
        {
          "library": "node_modules/devextreme-dist/css/icons/",
          "destination": "wwwroot/css/icons",
          "files": [
            "dxicons.ttf",
            "dxicons.woff2",
            "dxicons.woff"
          ]
        }
      ]
    }
    

    Note

    If your application already uses the libraries listed above, remove duplicate library references to ensure they are registered only once.

    For more information on LibMan, review the following article: Use LibMan with ASP.NET Core in Visual Studio.

Configure Application and Services

  1. Open the Program.cs file and modify its code as shown in the following code snippet:

    using DevExpress.AspNetCore;
    using DevExpress.AspNetCore.Reporting;
    //...
    
    var builder = WebApplication.CreateBuilder(args);
    
    // Add services to the container.
    builder.Services.AddControllersWithViews();
    
    builder.Services.AddDevExpressControls();
    builder.Services.AddMvc();
    builder.Services.ConfigureReportingServices(configurator => {
        configurator.ConfigureWebDocumentViewer(viewerConfigurator => {
            viewerConfigurator.UseCachedReportSourceBuilder();
        });
    });
    
    var app = builder.Build();
    
    app.UseDevExpressControls();
    System.Net.ServicePointManager.SecurityProtocol |= System.Net.SecurityProtocolType.Tls12;
    
    // Configure the HTTP request pipeline.
    if (!app.Environment.IsDevelopment()) {
        app.UseExceptionHandler("/Home/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios.
        app.UseHsts();
    }
    
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    
    app.UseRouting();
    
    app.UseAuthorization();
    
    app.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    
    app.Run();
    
  2. Implement a controller to process Document Viewer requests. In the Controllers folder, create the ReportingControllers.cs file with the following content:

    using DevExpress.AspNetCore.Reporting.WebDocumentViewer;
    using DevExpress.AspNetCore.Reporting.WebDocumentViewer.Native.Services;
    
    namespace WebApplication1.Controllers
    {
        public class CustomWebDocumentViewerController : WebDocumentViewerController
        {
            public CustomWebDocumentViewerController(IWebDocumentViewerMvcControllerService controllerService)
                : base(controllerService)
            {
            }
        }
    }
    

Add a Sample Report

  1. Right-click the project in the Solution Explorer and select Add | New Folder from the context menu. Rename the created folder to Reports.

  2. Right-click the Reports folder and select Add | New Item from the context menu. In the invoked Add New Item dialog, click the Reporting tree node and select DevExpress v23.2 Report.

    Add New Report

    Rename the new report to TestReport and click Add.

  3. Select the Blank report type in the invoked Report Wizard.

  4. The Report Designer displays the newly created blank report. Save the report and close the designer.

See the following topic for more information: Add a New Report in Visual Studio.

Add the Document Viewer Control

  1. Reference the DevExpress.AspNetCore namespace in the _ViewImports.cshtml file. Alternatively, you can reference this namespace in the view that contains the Document Viewer control.

    @using DevExpress.AspNetCore
    
  2. Add the following links to the Layout.cshtml page’s head section (the Views | Shared folder):

    <link rel="stylesheet" href="~/css/thirdparty.bundle.css" />
    <script src="~/js/thirdparty.bundle.js"></script>
    
  3. Replace the contents of the Index.cshtml file with the following code sample that displays the Document Viewer and loads the TestReport (the using directive is correct if the application name is WebApplication1 and the TestReport is created in the Reports folder):

    @using WebApplication1.Reports
    
    <link rel="stylesheet" href="~/css/viewer.part.bundle.css" />
    <script src="~/js/viewer.part.bundle.js"></script>
    
    @Html.DevExpress().WebDocumentViewer("DocumentViewer").Height("1000px").Bind(new TestReport())
    

Run the Application

The application’s page contains the Document Viewer control that displays the TestReport report.

View Result

Troubleshooting

If the page does not display the reporting component or if it is displayed incorrectly, check the following:

  • The script files should be registered in the correct order, as demonstrated in the bundleconfig.json code sample above. For more information, review the following help topic: Script Registration Order.
  • There should be no duplicate registrations. If you use bundle registration and copy the scripts from the documentation to your bundleconfig.json file, do not register the libraries on your web page.
  • The version of the DevExpress scripts (npm packages) should match the version of the server-side libraries (NuGet packages). You can enable Development Mode to check for library version mismatch on every request to the server. For details, review the following help topic: Server-Side Libraries Version.

Review the following help topic for more information: Troubleshooting.

Limitations

Review the following help topic for details on limitations in ASP.NET Core applications: Reporting .NET/.NET Core Limitations.

What’s Next

You have now completed a basic ASP.NET Core App with a Document Viewer control. Refer to the following articles for more information on Reporting features:

Restore Data Binding
Restore data bindings when the Document Viewer opens a report.
Open a Report in Document Viewer
Explore ways to display a report in a Document Viewer Control.
Document Viewer Customization
Customize Document Viewer elements.
Mobile Mode in Document Viewer
Enable mobile mode in the Document Viewer.