How to Use Angular 11 in ASP.NET MVC 5 with Angular CLI and VS 2017 – Windows ASP.NET Core Hosting 2020 | Review and Comparison

How to Use Angular 11 in ASP.NET MVC 5 with Angular CLI and VS 2017

Angular is one of the most in-demand web front-end frameworks developed by Google; it gets integrated with any server-side technology. In this article, let’s learn how to use Angular (Version 11) with ASP.NET MVC 5 using Angular-CLI.

I had written a post on Using Angular4 in ASP.NET MVC 5; I felt it was a little tedious to get it working as so many technologies are involved. This article describes minimal steps to get started.

Software pre-requites

  • Microsoft Visual Studio 2017/ 2019 (any edition)
  • Install Latest NodeJs
  • TypeScript 4.0

Installing Angular CLI

Angular CLI is a tool for developing an Angular-based (web, PWA) application; everything is out of the box, like generating components, services, pipes, unit tests, etc. For installing CLI, it must have NodeJS installed previously. Use this command to install CLI.

npm install -g @angular/cli

Create ASP.NET MVC 5 & Angular app together

Create an ASP.NET MVC 5 application. Named it as ngGitHouse. Nothing fancy in this, but it’s the first step. Once the CLI is installed, we create a brand new Angular application by running this command ng new gitHouseApp –minimal inside MVC 5 application folder structure.

It would take a few minutes to get all node modules downloaded. You can see in the folder structure that githouseapp folder is created in MVC 5 application folder structure.

To ensure that the githouseapp is set up properly, navigate to the folder path in the command prompt and run the following command ng build. If this succeeds, then your good to go.

Moving essentials files & folder to root

We intend to use the Angular framework inside MVC 5 views. To make it easy for understanding and maintenance, let’s move some essentials files and folders to the MVC 5 application’s root. The files & folder to be moved are

  • Src folder – This is the Angular application’s actual source folder; the entire project structure is present in this folder.
  • package.json – file containing the NPM packages needed to develop client application
  • angular.json – file containing Configuration settings for the Angular application. This file is essential for Angular-CLI to work seamlessly.
  • tsconfig.json – configuration file must exist for all TypeScript files to transpile to JavaScript.
  • node_modules – folder containing all downloaded node modules. This folder is always heavy.

Do NOT forget to include the above files & folder in Solution Explorer except node_modules

Update configuration settings

We have altered how AngularCLI generates the folder structure because we intend to use it in ASP.NET MVC 5 application. For CLI to work well, we have to update settings in the below configuration file.

tsconfig.json – The TypeScript compiler uses this file to transpile to JavaScript. It’s a mandatory file wherever TypeScript is used. The include config entry tells us to compile TypeScript from the src folder only instead of the entire project structure. If you plan to use TypeScript in another folder, do add in this section. The outDir entry in compilerOptions provides a folder for placing all transpiled files with source maps.

Source Maps helps us debug the TypeScript (Angular in this case) code in the browser just like JavaScript code.

{
  "compileOnSave": false,
  "include": [
    "./src"
  ],
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./scripts/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2017",
      "dom"
    ]
  }
}

angular.json – This is the heart of AngularCLI; it contains all options necessary to play around Angular artifacts like generating components, pipes, service providers, class, directives, etc. The sourceRoot now points to the src folder; the outputPath is now pointing to ./Scripts/libs folder as part of the MVC 5 project. The output files of the ng build command will be copied here.

I recommend removing the githouseapp created by the CLI project.

Building the application

As we moved folder location, configuration files got updated. It’s best to run the command ng build in the command prompt’s project root folder. If done successfully, you would see a similar image as below. Don’t forget to include scripts/libs folder in Solution Explorer.

ng build –watch will run the build when file changes

Loading Angular in MVC 5 views

Now that everything is building properly, let’s load the Angular11 app in ASP.NET MVC 5 views. I will be using Contact.cshtml file generated while scaffolding the MVC application. I removed the existing code to include our code to load the component as below. The app-root is an Angular Component generated by default using CLI.

@section Scripts {
    < script type = "text/javascript"
    src = "~/Scripts/libs/runtime.js" > < /script> <script type="text/javascript
    " src="~/Scripts/libs / polyfills.js "></script> <script type="
    text / javascript " src="~/Scripts/libs / styles.js "></script> <script type="
    text / javascript " src="~/Scripts/libs / vendor.js "></script> <script type="
    text / javascript " src="~/Scripts/libs / main.js "></script> 
}
<app-root></app-root>

The Scripts section includes the link to files created in the libs folder run from the above step. The JS files referencing order is important here. 

Run the application, click on the Contact link on the navbar to load the Angular.

Debugging the app

We successfully ran the Angular11 code in ASP.NET MVC 5; debugging the code in the browser (chrome) involves press F12, select the Sources tab. Check out the below image for file location while running the application. Do run the command ng build –watch to compile Angular11 code automatically.