Introduction
<img alt="" src="1116918/1.gif" style="width: 551px; height: 360px;" />
In our previous article,
we have seen in detail about ASP.NET Core 1.0, Angular2 and WEB API to display the data.
In this article we will see in detail about using ASP.NET Core 1.0 with Angular2 to Insert and Select Student Details to SQL Server Database using WEB API.
In this article we will see in detail how to,
- Create our ASP.NET Core 1.0 RC2 Web Application.
- Create Model to add Student details.
- Create WEB API Controller using Entity framework to Select and Insert data to database.
- How to add TypeScript JSON Configuration File
- How to add grunt package using NPM configuration file
- How to configure Grunt File.
- Adding Dependencies to install Angular2 and all other files
- How to create our Angular2 App, boot using Type Script file.
- Using HTTP Get/Post to Insert and select data from Angular2 to WEB API to insert in DB.
- Creating HTML File
- How to Run the Grunt file using Visual Studio Task Runner Explorer
- How to Run and view our Sample.
Reference website :
Prerequisites
- Visual Studio 2015: You can download it from here.
- ASP.NET Core 1.0 RC2: download link,link2.
Using the code
We will be using our SQL Server database for our WEB API. First we create a database named StudentsDB and a table as StudentMaster. Here is the SQL script to create Database table and sample record insert query in our table. Run the below query in your local SQL server to create Database and Table to be used in out project.
USE MASTER
GO
IF EXISTS (SELECT [name] FROM sys.databases WHERE [name] = 'StudentsDB' )
DROP DATABASE StudentsDB
GO
CREATE DATABASE StudentsDB
GO
USE StudentsDB
GO
IF EXISTS ( SELECT [name] FROM sys.tables WHERE [name] = 'StudentMasters' )
DROP TABLE StudentMasters
GO
CREATE TABLE [dbo].[StudentMasters](
[StdID] INT IDENTITY PRIMARY KEY,
[StdName] [varchar](100) NOT NULL,
[Email] [varchar](100) NOT NULL,
[Phone] [varchar](20) NOT NULL,
[Address] [varchar](200) NOT NULL
)
INSERT INTO [StudentMasters] ([StdName],[Email],[Phone],[Address])
VALUES ('Shanu','syedshanumcain@gmail.com','01030550007','Madurai,India')
INSERT INTO [StudentMasters] ([StdName],[Email],[Phone],[Address])
VALUES ('Afraz','Afraz@afrazmail.com','01030550006','Madurai,India')
INSERT INTO [StudentMasters] ([StdName],[Email],[Phone],[Address])
VALUES ('Afreen','Afreen@afreenmail.com','01030550005','Madurai,India')
select * from [StudentMasters]
Step 1: Create our ASP.NET Core 1.0 Web Application.
After installed both Visual Studio 2015 and ASP.NET Core 1.0 RC2. Click Start, then Programs and select Visual Studio 2015 - Click Visual Studio 2015. Click New, then Project, select Web and select ASP.NET Core Web Application. Enter your Project Name and click OK.
<img alt="" src="1116918/12.PNG" style="width: 547px; height: 379px;" />
Next select Web Application. If you are not hosting in Cloud then you can uncheck the Host in the Cloud at the bottom right corner. Click OK
<img alt="" src="1116918/13.PNG" style="width: 499px; height: 383px;" />
Now we have
<img alt="" src="1116918/14.PNG" style="width: 521px; height: 300px;" />
Database Connection String:
Now we need to change the local connection string from ASP.Net 5 project with our SQL Server connection.
Note: In ASP.NET Core 1.0 we need to use “appsettings.json” file instead of web.config.We can find the “appsettings.json” file from our ASP.NET Core 1.0 solution.
<img alt="" src="1116918/35.PNG" />
To change the default connection string with our SQL connection open the “appsettings.json” file .Yes this is JSON file and this file looks like below Image by default.
<img alt="" src="1116918/36.PNG" style="width: 540px; height: 171px;" />
Now the default connectionstring will be something like this
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-Core1.0Angular2CRUDInsert-599f2ca4-119a-4fd5-a2a4-e58fb4b2e5be;Trusted_Connection=True;MultipleActiveResultSets=true"
},
Now we change this to our SQL Connection like below,
"ConnectionStrings": {
"DefaultConnection": "Server=SQLSERVERNAME;Database=StudentsDB;user id=SQLID;password=SQLPWD;Trusted_Connection=True;MultipleActiveResultSets=true;"
},
Step 2: Creating MVC Model to return student list
We can create a model by adding a new class file in our Model Folder.
<img alt="" src="1116918/3.PNG" />
Right click the Models folder and click new Item .Select Class and enter your class name as “StudentMasters.cs”
<img alt="" src="1116918/4.PNG" style="width: 502px; height: 287px;" />
Now add in this class we first create property variable,add student.We will be using this in our WEB API controller.
using System.ComponentModel.DataAnnotations;
namespace WebApplicationTestSample.Models
{
public class StudentMasters
{
[Key]
public int StdID { get; set; }
[Required]
[Display(Name = "Name")]
public string StdName { get; set; }
[Required]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[Display(Name = "Phone")]
public string Phone { get; set; }
public string Address { get; set; }
}
}
Step 3: Creating WEB API Controller
We can create a controller by adding a new Empty API Controller in our Controller Folder.
<img alt="" src="1116918/5.PNG" />
Right click the Controller folder and Add Controller .Select API Controller with action, using Entity Framework and click Add
<img alt="" src="1116918/37.PNG" style="width: 478px; height: 242px;" />
Select the Model class as StudentMasters.
<img alt="" src="1116918/38.PNG" style="width: 481px; height: 275px;" />
After selecting the Model Class select the Data Context Class. Here we are selecting the default ApplicationDbContext. Note we have set the default connection string to our SQL Server database Connection.Next give our WEB API controller name as StudentMastersAPI.
<img alt="" src="1116918/6.PNG" style="width: 493px; height: 179px;" />
We can see that our WEB API Controller has been created now and also the controller will contain default Select (HttpGet) and Insert method as (HttpPost). We will be using this get and post method In our Angular2 to select and insert data to database .
<img alt="" src="1116918/39.PNG" style="width: 539px; height: 464px;" />
To test it we can run our project and copy the get method api path here we can see our API path for get is api/StudentMastersAPI/
Run the program and paste the above API path to test our output.
<img alt="" src="1116918/1.PNG" style="width: 471px; height: 106px;" />
Step 4: How to add TypeScript JSON Configuration File
The TypeScript JSON file will file specifies the root files and the compiler options required to compile the project .To know more about TypeScript JSON Configuration kindly visit this sites
http://www.typescriptlang.org/docs/handbook/tsconfig-json.html ,
To create the TypeScript JSON file right click on you Project and Click Add new Item.
<img alt="" src="1116918/15.PNG" style="width: 479px; height: 338px;" />
Select TypeScript JSCON Configuration File and Click ok. The File will be look like below image.
<img alt="" src="1116918/16.PNG" />
Now copy the below code and replace with your config file.
"compilerOptions": {
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"module": "commonjs",
"moduleResolution": "node",
"noImplicitAny": false,
"noEmitOnError": true,
"removeComments": false,
"target": "es5",
"sourceMap": true
<img alt="" src="1116918/17.PNG" />
Step 5: How to add grunt package using NPM configuration file
Now we need to add a NPM Configuration File for adding a grunt package to run our java scripts.
As we have created as a Web Application the NPM Configuration File will be located in our project.
By default we can’t view our NPM Configuration File. The NPM Configuration File will be in the name of “package.JSON” . TO view that from the Solution Explorer click on “Show All Files”
Now open the “package.JSON” file .Now first we need to change the name to our project Solution name and add our grunt package .we can see the code here below the image.
<img alt="" src="1116918/18.PNG" />
Here we have changed the name as our Solution name and also added the grunt package.
{
"name": "test",
"version": "0.0.0",
"private": true,
"devDependencies": {
"grunt": "1.0.1",
"grunt-contrib-copy": "1.0.0",
"grunt-contrib-uglify": "1.0.1",
"grunt-contrib-watch": "1.0.0",
"grunt-ts": "5.5.1",
"gulp": "3.8.11",
"gulp-concat": "2.5.2",
"gulp-cssmin": "0.1.7",
"gulp-uglify": "1.2.0",
"rimraf": "2.2.8"
}
}
Now save the package.json file and you should be able to see a grunt package under Dependencies/ npm Folder will be first Resorted and then installed.
Restoring :
<img alt="" src="1116918/19.PNG" />
All Installed:
<img alt="" src="1116918/20.PNG" />
Step 6: Configure Grunt File.
Grunt is used to build all our client side resources like JavaScript for our project.
First step is to add a Grunt file to our project. Right click our project and Select Grunt Configuration File and click Add.
<img alt="" src="1116918/21.PNG" style="width: 548px; height: 382px;" />
After creating the file now s we need to edit this file to add load plugins, configure plugins and define tasks
Here in our Grunt file we have first load plugins which we have added in our npm. Using loadNpmTask here we load 'grunt-contrib-copy
,'grunt-contrib-uglify'
, 'grunt-contrib-watch'
<img alt="" src="1116918/22.PNG" />
Next we configure the grunt add the app.js file in our wwwroot folder. All our Script files from Scripts folder result will be added in this app.js file. Next we need to copy all the Script file from 'node_modules/ to our local js Folder.
The watch plugin will be used to check for any changes on JavaScript file and update it app.js with all new changes.
module.exports = function (grunt) {
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-ts');
grunt.initConfig({
ts:
{
base:
{
src: ['Scripts/app/boot.ts', 'Scripts/app/**/*.ts'],
outDir: 'wwwroot/app',
tsconfig: './tsconfig.json'
}
},
uglify:
{
my_target:
{
files: [{
expand: true,
cwd: 'wwwroot/app',
src: ['**/*.js'],
dest: 'wwwroot/app'
}]
},
options:
{
sourceMap: true
}
},
copy: {
main: {
files:
[{
expand: true,
flatten: true,
src: ['Scripts/js/**/*.js', 'node_modules/es6-shim/es6-shim.min.js', 'node_modules/systemjs/dist/system-polyfills.js', 'node_modules/angular2/bundles/angular2-polyfills.js', 'node_modules/systemjs/dist/system.src.js', 'node_modules/rxjs/bundles/Rx.js', 'node_modules/angular2/bundles/angular2.dev.js'],
dest: 'wwwroot/js/',
filter: 'isFile'
}]
}
},
watch: {
scripts: {
files: ['Scripts/**/*.js'],
tasks: ['ts', 'uglify', 'copy']
}
}
});
grunt.registerTask('default', ['ts', 'uglify', 'copy', 'watch']);
};
Step 7: Adding Dependencies to install Angular2 and all other files
We are using NPM to install our Angular2 in our web application. Open our Package.JSON file and the below dependencies.
"dependencies": {
"@angular/http": "2.0.0-rc.1",
"angular2": "^2.0.0-beta.8",
"angular2-jwt": "0.1.16",
"angular2-meteor": "0.5.5",
"cors": "2.7.1",
"systemjs": "0.19.22",
"es6-promise": "^3.0.2",
"es6-shim": "^0.33.3",
"reflect-metadata": "0.1.2",
"rxjs": "5.0.0-beta.2",
"tsd": "^0.6.5",
"zone.js": "0.5.15"
},
The edited Package.json file will be look like below image.
<img alt="" src="1116918/23.PNG" style="width: 317px; height: 408px;" />
Save the file and wait for few second to complete all decencies installed.
<img alt="" src="1116918/24.PNG" />
Step 8 How to create our Angular2 App, boot using Type Script file.
Now it’s time to create our Angular2 application. First create a Folder named Scripts. Right click our project and click add new Folder and name the folder name as “Scripts”. Now we will create our TypeScript files inside this Scripts folder.
To work with Angular2 we need to create 2 important TypeScript file.
- Component File where we write our Angular coding.
- Boot file: To run our component app .
Creating App TypeScript file:
Right Click on Scripts folder and click on add new Item. Select TypeScript File and name the file as App.ts and click Add.
<img alt="" src="1116918/25.PNG" style="width: 494px; height: 319px;" />
In App.ts file we has three parts first is the
- import part
- Next is component part
- Next we have is the class for writing our business logics.
Here we can see a simple basic one way binding example to display the welcome message in side h1 tag.Here.
1. import part : first we import angular2 files to be used in our component here we import http for using http client in our Angular2 component and importing NgFor for using the looping and bind all the student details array value one by one,and also we are importing one more typescript export class name StudentMasters from the model file.
import { Component, Injectable, Inject} from 'angular2/core';
import { NgIf, NgFor } from 'angular2/common';
import {Http, Response, HTTP_PROVIDERS, Headers, RequestOptions} from 'angular2/http';
import { StudentMasters } from './model';
import {Observable} from 'rxjs/Observable';
import 'rxjs/Rx';
2.Next is component part :
In component we have selector, directives and template. Selector is to give name for this app and in our html file we use this selector name to display in our html page.
In template we write our code. IN template first we create a form to insert Student details to database using the http post method. In Button click we call the addStudentsDetails() method to insert student details. After insert we call the getData() method to bind the updated result.
To display the StudentMaster details we are using ngFOR inside html table.in the method we have used http get function to load data from WEB API and to display in our html page. We have made all the design inside the template. There is also another method as we can create a html file and add all the design in that html page and in template we can give the html file name.
@Component({
selector: "my-app",
directives: [NgFor],
template: `
<table style="background-color:#FFFFFF; border: dashed 3px #6D7B8D; padding :5px;width :99%;table-layout:fixed;" cellpadding="2" cellspacing="2">
<tr style="height: 30px; background-color:#336699 ; color:#FFFFFF ;border: solid 1px #659EC7;">
<td>
<h2>Insert Student Details : </h2>
</td>
</tr>
<tr>
<td>
<table style="color:#9F000F;font-size:large" cellpadding="4" cellspacing="6">
<tr>
<td><b>Students ID: </b> </td>
<td>
<input [(ngModel)]="students.StdID" value="0" style="background-color:tan" readonly>
</td>
<td><b>Students Name: </b> </td>
<td>
<input [(ngModel)]="students.StdName" >
</td>
</tr>
<tr>
<td><b>Email: </b> </td>
<td>
<input [(ngModel)]="students.Email" >
</td>
<td><b>Phone: </b> </td>
<td>
<input [(ngModel)]="students.Phone" >
</td>
</tr>
<tr>
<td><b>Address: </b> </td>
<td>
<input [(ngModel)]="students.Address" >
</td>
<td colspan="2">
<button (click)=addStudentsDetails() style="background-color:#334668;color:#FFFFFF;font-size:large;width:200px;
border-color:#a2aabe;border-style:dashed;border-width:2px;">Save</button>
</td>
</tr>
</table>
</td>
</tr>
<tr><td> </td></tr>
<tr>
<td>
<table style="background-color:#FFFFFF; border solid 2px #6D7B8D; padding 5px;width 99%;table-layout:fixed;" cellpadding="2" cellspacing="2">
<tr style="height: 30px; background-color:#336699 ; color:#FFFFFF ;border: solid 1px #659EC7;">
<td width="100" align="center">Student ID</td>
<td width="240" align="center">Student Name</td>
<td width="240" align="center">Email</td>
<td width="120" align="center">Phone</td>
<td width="340" align="center">Address</td>
</tr>
<tbody *ngFor="let std of student">
<tr>
<td align="center" style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
<span style="color:#9F000F">{{std.StdID}}</span>
</td>
<td align="left" style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
<span style="color:#9F000F">{{std.StdName}}</span>
</td>
<td align="left" style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
<span style="color:#9F000F">{{std.Email}}</span>
</td>
<td align="center" style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
<span style="color:#9F000F">{{std.Phone}}</span>
</td>
<td align="left" style="border: solid 1px #659EC7; padding: 5px;table-layout:fixed;">
<span style="color:#9F000F">{{std.Address}}</span>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</table>
`,
})
3. Export Class :
This is the main class where we do all our business logic and variable declaration to be used for in our component template.in this class we have created a method named getData() and in this method we get the API method result and bind the result to the student array. In button click we call the addStudentsDetails() method to insert the data to database using http post method.
export class AppComponent {
student: Array<StudentMasters> = [];
students = {};
myName: string;
constructor(@Inject(Http) public http: Http) {
this.myName = "Shanu";
this.getData();
}
getData() {
this.http.get('api/StudentMastersAPI')
.map((responseData) => {
return responseData.json();
})
.map((student: Array<any>) => {
let result: Array<StudentMasters> = [];
if (student) {
student.forEach((student) => {
result.push(new StudentMasters(student.StdID, student.StdName,
student.Email, student.Phone, student.Address));
});
}
return result;
})
.subscribe(res => this.student = res);
}
addStudentsDetails() {
var headers = new Headers();
headers.append('Content-Type', 'application/json; charset=utf-8');
this.http.post('api/StudentMastersAPI', JSON.stringify(this.students), { headers: headers }).subscribe();
alert("Student Detail Inserted");
this.getData();
}
}
Next we need to add the boot.ts file to run our app.
Creating boot TypeScript file:
Right Click on Scripts folder and click on add new Item. Select TypeScript File and name the file as boot.ts and click Add.
<img alt="" src="1116918/26.PNG" style="width: 483px; height: 315px;" />
In boot.ts file we add the below code. Here first we import bootsrap file to load and run our app file and also we import our app component. Note to import our app we need to give the same class name which was given in our app typescript file and give our app path in from as ’./app’ .Next we run our app by adding the app name in bootstrap as bootstrap(myAppComponent);.
import {bootstrap} from 'angular2/platform/browser'
import {ROUTER_PROVIDERS} from "angular2/router";
import {HTTP_PROVIDERS, HTTP_BINDINGS} from "angular2/http";
import {AppComponent} from './app'
bootstrap(AppComponent, [HTTP_BINDINGS, HTTP_PROVIDERS]);
Creating model TypeScript file:
Right Click on Scripts folder and click on add new Item. Select TypeScript File and name the file as model.ts and click Add.
We use this model typescript file to create our Studentmasters model and declare all the public properties which we created in our MVC model.
export class StudentMasters {
constructor(
public StdID: number,
public StdName: string,
public Email: string,
public Phone: string,
public Address: string
) { }
}
Step 9: Creating HTML File
Next we need to create our html page to view result.To add the HTML file right click on wwwroot folder and click add new item , give the name as index.html and click Add.
<img alt="" src="1116918/27.PNG" style="width: 518px; height: 346px;" />
In HTMl file replace the below code. Here we can see first in header part we add all the script reference file and in script we load our boot file to run our app.In body part we display the result using the component selector name .In our app component we have given the selector name as “myapp1”.In this HTML to display the result we add tag like this <my-app>Please wait...</my-app>
<html>
<head>
<title>ASP.NET Core: AngularJS 2 Demo</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<!---->
<!---->
<script src="/js/es6-shim.min.js"></script>
<script src="/js/system-polyfills.js"></script>
<!---->
<script src="/js/angular2-polyfills.js"></script>
<script src="/js/system.src.js"></script>
<script src="/js/Rx.js"></script>
<script src="/js/angular2.dev.js"></script>
<script src="/js/router.dev.js"></script>
<script src="/js/http.dev.js"></script>
<!---->
<script>
System.config
({
packages:
{
"app":
{
defaultExtension: },
}
});
System.import( </script>
</head>
<body>
<table style='width: 99%;table-layout:fixed;'>
<tr>
<td>
<table style="background-color:#FFFFFF;border: dashed 3px #6D7B8D; padding:10px;width: 99%;table-layout:fixed;" cellpadding="12" cellspacing="12">
<tr style="height: 30px; background-color:#f06a0a ; color:#FFFFFF ;border: solid 1px #659EC7;">
<td align="center">
<h3> SHANU ASP.NET Core1.0 Insert/Select Student Details to Database Using Angular2 and WEB API </h3>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<!---->
<my-app>Please wait...</my-app>
</td>
</tr>
</table>
</body>
</html>
So what is next we have successfully created our first Angular2 and Asp.Net core 1.0 web application and wait we have to do one more pending work to run our application? Yes we need to run our Grunt file to create our entire script file in our wwwroot scripts folder.
Step 8: Run the Grunt file using Visual Studio Task Runner Explorer
Now we need to run the Grunt file using Visual Studio Task Runner.
To view the Task Runner Click the menu View-> Other Windows,-> and click on Task Runner Explorer.
<img alt="" src="1116918/28.PNG" style="width: 488px; height: 465px;" />
We can also open Task Runner by right click on our Gruntfile.js in Solution Explorer and click on Task Runner Explorer.
<img alt="" src="1116918/29.PNG" style="width: 209px; height: 192px;" />
Now we can see our Task Runner Explorer.
<img alt="" src="1116918/30.PNG" style="width: 352px; height: 198px;" />
Click on GruntFile.js and click on refresh button at top left.
<img alt="" src="1116918/31.PNG" style="width: 280px; height: 231px;" />
Now we can see all the GruntFile has been added.
<img alt="" src="1116918/32.PNG" style="width: 354px; height: 247px;" />
Right click the default under Alias Task and click Run.
<img alt="" src="1116918/33.PNG" style="width: 282px; height: 258px;" />
Now our Grunt file has been successfully run in our project. When we add a script file we can see new app.js file will be created in our wwwroot folder.
<img alt="" src="1116918/34.PNG" style="width: 465px; height: 171px;" />
Run the Program:
Here we can see all the data from WEB API has been bind to our HTML page using Angular2.You can insert new Student details .Same like this you can add Update and Delete function to perform complete CRUD operations to maintain Student records.
Note: First create the Database and Table in your SQL Server .You can run the SQL Script from this article to create StudentsDB database and StudentMasters Table and also don’t forget to change the Connection string from “appsettings.json”
<img alt="" src="1116918/1.gif" style="width: 551px; height: 360px;" />
History
Core1Angular2CRUDTest.zip - 2016/08/06