Get started with .Net MVC Project

ASP .Net MVC, SQL, Projects

 

 

1. Appsetting.json Changes

{
“Logging”: {
“LogLevel”: {
“Default”: “Information”,
“Microsoft.AspNetCore”: “Warning”
}
},
“AllowedHosts”: “*”,
“ConnectionStrings”: {
“EmployeePortal”: “Server=XYZ\\SQLEXPRESS01;Database=xyz_db;Trusted_Connection=True;TrustServerCertificate=True”
}
}

2. APPLICATIONDBCONTEXT Changes

using EmployeePortal.Models.Entities;
using Microsoft.EntityFrameworkCore;
using System.Data.Common;

namespace EmployeePortal.Data
{
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options) { }

public DbSet<Employee> Employees { get; set; }
}
}

3. Program.cs Changes

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString(“EmployeePortal”)));

          var app = builder.Build();

4. MODEL.ENTITIES.EMPLOYEE Changes

using System.Reflection.Metadata;

namespace EmployeePortal.Models.Entities
{
public class Employee
{
public int Id { get; set; }
public String Name { get; set; }
public string Gender { get; set; }
public String Phone { get; set; }
public String Email { get; set; }
public int BasicSalary { get; set; }
public int Hra { get; set; }
public int Convenience { get; set; }
public int TotalSalary { get; set; }
public string City { get; set; }
public byte[]? ImageData { get; set; }
public string? FileName { get; set; }
}
}

4. IN CONTROLLER AddEmployeeViewModel Changes

namespace EmployeePortal.Controllers
{
public class AddEmployeeViewModel
{
public int Id { get; set; }
public String Name { get; set; }
public string Gender { get; set; }
public String Phone { get; set; }
public String Email { get; set; }
public int BasicSalary { get; set; }
public int Hra { get; set; }
public int Convenience { get; set; }
public int TotalSalary { get; set; }
public string City { get; set; }
public IFormFile ImageData { get; set; }
public string FileName { get; set; }
}
}

5. Controller Changes 

using EmployeePortal.Data;

using EmployeePortal.Models;

using EmployeePortal.Models.Entities;

using Microsoft.AspNetCore.Mvc;

using Microsoft.EntityFrameworkCore;

using OfficeOpenXml;

using System.Drawing;

using System.IO;

using System.Linq;

using static System.Net.Mime.MediaTypeNames;

namespace EmployeePortal.Controllers

{

    public class EmployeesController : Controller

    {

        private readonly ApplicationDbContext dbContext;

        public EmployeesController(ApplicationDbContext dbContext)

        {

            this.dbContext = dbContext;

        }

        [HttpGet]

        public IActionResult Add()

        {

            return View();

        }

        [HttpPost]

        public async Task<IActionResult> Add(AddEmployeeViewModel viewModel)

        {

            if (viewModel.ImageData != null && viewModel.ImageData.Length > 0)

            {

                using (var memoryStream = new MemoryStream()) {

                    await viewModel.ImageData.CopyToAsync(memoryStream);

                    var employeeData = new Models.Entities.Employee

                    {

                        Name = viewModel.Name,

                        Email = viewModel.Email,

                        Gender = viewModel.Gender,

                        Hra = viewModel.Hra,

                        Convenience = viewModel.Convenience,

                        BasicSalary = viewModel.BasicSalary,

                        City = viewModel.City,

                        Phone = viewModel.Phone,

                        TotalSalary = viewModel.Hra+viewModel.Convenience+viewModel.BasicSalary,

                        FileName = viewModel.ImageData.FileName,

                        ImageData =memoryStream.ToArray(),

                    };

                    await dbContext.Employees.AddAsync(employeeData);

                    await dbContext.SaveChangesAsync();

                    return RedirectToAction(“List”, “Employees”);

                }

            }

            var employee = new Models.Entities.Employee

            {

                Name = viewModel.Name,

                Email = viewModel.Email,

                Gender = viewModel.Gender,

                Hra = viewModel.Hra,

                Convenience = viewModel.Convenience,

                BasicSalary = viewModel.BasicSalary,

                City = viewModel.City,

                Phone = viewModel.Phone,

                TotalSalary = viewModel.TotalSalary,                

            };

            await dbContext.Employees.AddAsync(employee);

            await dbContext.SaveChangesAsync();

            return RedirectToAction(“List”, “Employees”);

        }

        [HttpGet]

        public async Task<IActionResult> List()

        {

            var employees = await dbContext.Employees.ToListAsync();

                return View(employees);

        }

        [HttpGet]

        public async Task<IActionResult> Edit(int id)

        {

            var employee =await dbContext.Employees.FindAsync(id);

            return View(employee);

        }

        [HttpPost]

        public async Task<IActionResult> Edit(AddEmployeeViewModel viewmodel)

        {

           var employee = await dbContext.Employees.FindAsync(viewmodel.Id);

            if (viewmodel.ImageData != null && viewmodel.ImageData.Length > 0) {

                using (var memoryStream = new MemoryStream())

                {

                    await viewmodel.ImageData.CopyToAsync(memoryStream);

                    if (employee is not null)

                    {

                        employee.Name = viewmodel.Name;

                        employee.Email = viewmodel.Email;

                        employee.Phone = viewmodel.Phone;

                        employee.TotalSalary = viewmodel.Hra + viewmodel.Convenience + viewmodel.BasicSalary;

                        employee.FileName = viewmodel.FileName;

                        employee.BasicSalary = viewmodel.BasicSalary;

                        employee.Gender = viewmodel.Gender;

                        employee.City = viewmodel.City;

                        employee.Convenience = viewmodel.Convenience;

                        employee.Hra = viewmodel.Hra;

                        employee.FileName= viewmodel.FileName;

                        employee.ImageData= memoryStream.ToArray();

                        await dbContext.SaveChangesAsync();

                    }

                    return RedirectToAction(“List”, “Employees”);

                };

            }

            if (employee is not null)

            {

                employee.Name = viewmodel.Name;

                employee.Email = viewmodel.Email;

                employee.Phone = viewmodel.Phone;

                employee.TotalSalary = viewmodel.Hra + viewmodel.Convenience + viewmodel.BasicSalary;

                employee.FileName = viewmodel.FileName;

                employee.BasicSalary = viewmodel.BasicSalary;

                employee.Gender = viewmodel.Gender;

                employee.City = viewmodel.City;

                employee.Convenience = viewmodel.Convenience;

                employee.Hra = viewmodel.Hra;

                await dbContext.SaveChangesAsync();

            }

            return RedirectToAction(“List”, “Employees”);

        }     

        [HttpPost]

        public async Task<IActionResult>Delete(Employee viewModel)

        {

            var employee = await dbContext.Employees.AsNoTracking().FirstOrDefaultAsync(x => x.Id == viewModel.Id);

            if(employee is not null)

            {

                dbContext.Employees.Remove(viewModel);

                await dbContext.SaveChangesAsync();

            }

            return RedirectToAction(“List”, “Employees”);

        }

        public IActionResult ExportToExcel()

        {

            // Get employee from database

             var employees = dbContext.Employees.ToList();

            // Create a memory stream to hold the Excel file data

            using (var package = new ExcelPackage())

            {

                // Add a worksheet to the Excel file

                var worksheet = package.Workbook.Worksheets.Add(“Employee”);

                // Set the headers for the Excel sheet

                worksheet.Cells[1, 1].Value = “NAME”;

                worksheet.Cells[1, 2].Value = “GENDER”;

                worksheet.Cells[1, 3].Value = “PHONE”;

                worksheet.Cells[1, 4].Value = “EMAIL”;

                worksheet.Cells[1, 5].Value = “BASICSALARY”;

                worksheet.Cells[1, 6].Value = “HRA”;

                worksheet.Cells[1, 7].Value = “CONVENIENCE”;

                worksheet.Cells[1, 8].Value = “TOTALSALARY”;

                worksheet.Cells[1, 9].Value = “CITY”;

                worksheet.Cells[1, 10].Value = “FILENAME”;

                worksheet.Cells[1, 11].Value = “IMAGE”;             

                // Insert employees into the worksheet

                int row = 2;

                foreach (var employee in employees)

                {

                    worksheet.Cells[row, 1].Value = employee.Name;

                    worksheet.Cells[row, 2].Value = employee.Gender;

                    worksheet.Cells[row, 3].Value = employee.Phone;

                    worksheet.Cells[row, 4].Value = employee.Email;

                    worksheet.Cells[row, 5].Value = employee.BasicSalary;

                    worksheet.Cells[row, 6].Value = employee.Hra;

                    worksheet.Cells[row, 7].Value = employee.Convenience;

                    worksheet.Cells[row, 8].Value = employee.TotalSalary;

                    worksheet.Cells[row, 9].Value = employee.City;

                    worksheet.Cells[row, 10].Value = employee.FileName;

                    if (employee.ImageData != null && employee.ImageData.Length > 0)

                    {

                        using (var memoryStream = new MemoryStream(employee.ImageData))

                        {

                            // Create an Image from the byte array

                            var img = System.Drawing.Image.FromStream(memoryStream);

                            // Convert the image to MemoryStream (this is compatible with EPPlus)

                            using (var imgMemoryStream = new MemoryStream())

                            {

                                // Save the image to the MemoryStream in PNG format

                                img.Save(imgMemoryStream, System.Drawing.Imaging.ImageFormat.Png);

                                // Make sure to set the position of the stream to the beginning

                                imgMemoryStream.Seek(0, SeekOrigin.Begin);

                                // Add the image to the worksheet (using the Image, not the MemoryStream)

                                var excelImage = worksheet.Drawings.AddPicture($”Image_{row}”, img);

                                // Set image size (optional)

                                excelImage.SetSize(50, 50);

                                excelImage.SetPosition(row – 1, 0, 10, 0); // Adjust the position of the image in the sheet

                            }

                        }

                    } 

                    row++;

                }

                // Save the Excel file to a memory stream

                var fileContents = package.GetAsByteArray();

                // Return the file as a download

                return File(fileContents, “application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”, “Employees.xlsx”);

            }

        }

    }

}

6. ADD.CSHTML

@*

    For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860

*@

@{

}

@model EmployeePortal.Controllers.AddEmployeeViewModel

@{

    // Define the list of popular cities directly in the view

    var cities = new List<SelectListItem>

    {

        new SelectListItem { Text = “Delhi”, Value = “Delhi” },

        new SelectListItem { Text = “Mumbai”, Value = “Mumbai” },

        new SelectListItem { Text = “Kolkata”, Value = “Kolkata” },

        new SelectListItem { Text = “Bangalore”, Value = “Bangalore” },

        new SelectListItem { Text = “Chennai”, Value = “Chennai” },

        new SelectListItem { Text = “Hyderabad”, Value = “Hyderabad” },

        new SelectListItem { Text = “Pune”, Value = “Pune” },

        new SelectListItem { Text = “Ahmedabad”, Value = “Ahmedabad” },

        new SelectListItem { Text = “Jaipur”, Value = “Jaipur” },

        new SelectListItem { Text = “Lucknow”, Value = “Lucknow” },

        new SelectListItem { Text = “Surat”, Value = “Surat” },

        new SelectListItem { Text = “Kanpur”, Value = “Kanpur” },

        new SelectListItem { Text = “Nagpur”, Value = “Nagpur” },

        new SelectListItem { Text = “Indore”, Value = “Indore” },

        new SelectListItem { Text = “Thane”, Value = “Thane” },

        new SelectListItem { Text = “Bhopal”, Value = “Bhopal” },

        new SelectListItem { Text = “Visakhapatnam”, Value = “Visakhapatnam” },

        new SelectListItem { Text = “Pimpri-Chinchwad”, Value = “Pimpri-Chinchwad” },

        new SelectListItem { Text = “Patna”, Value = “Patna” },

        new SelectListItem { Text = “Vadodara”, Value = “Vadodara” }

    };

}

ADD.CSHTML

<h1>Add Employee</h1>

<form method=”post” enctype=”multipart/form-data”>

    <div class=”mt-3″>

        <label class=”form-label”>Name</label>

        <input type=”text” class=”form-control” asp-for=”Name” />

    </div>

    <div class=”form-group”>

        <label for=”gender”>Gender</label><br />

        @Html.RadioButtonFor(model => model.Gender, “Male”)

        <label>Male</label>

        @Html.RadioButtonFor(model => model.Gender, “Female”)

        <label>Female</label>

        @Html.RadioButtonFor(model => model.Gender, “Other”)

        <label>Other</label>

    </div>

    <div class=”mt-3″>

        <label class=”form-label”>phone</label>

        <input type=”text” class=”form-control” asp-for=”Phone” />

    </div>

    <div class=”mt-3″>

        <label class=”form-label”>Basic Salary</label>

        <input type=”number” class=”form-control” asp-for=”BasicSalary” id=”BasicSalary” oninput=”calculateTotal()” />

    </div>

    <div class=”mt-3″>

        <label class=”form-label”>HRA</label>

        <input type=”number” class=”form-control” asp-for=”Hra” id=”Hra” oninput=”calculateTotal()” />

    </div>

    <div class=”mt-3″>

        <label class=”form-label”>Convenience</label>

        <input type=”number” class=”form-control” asp-for=”Convenience” id=”Convenience” oninput=”calculateTotal()” />

    </div>

    <div class=”mt-3″>

        <label class=”form-label”>Total Salary</label>

        <input type=”number” class=”form-control” asp-for=”TotalSalary” id=”TotalSalary” readonly />

    </div>

    <script>

        function calculateTotal() {

            const basic = parseFloat(document.getElementById(“BasicSalary”).value) || 0;

            const hra = parseFloat(document.getElementById(“Hra”).value) || 0;

            const convenience = parseFloat(document.getElementById(“Convenience”).value) || 0;

            const total = basic + hra + convenience;

            document.getElementById(“TotalSalary”).value = total.toFixed(2);

        }

    </script>

    <div class=”mt-3″>

        <label class=”form-label” for=”City”>City</label>

        @Html.DropDownListFor(model => model.City, cities, “Select a City”, new { @class = “form-control” })

    </div>

    <div class=”mt-3″>

        <label class=”form-label”>email</label>

        <input type=”email” class=”form-control” asp-for=”Email” />

    </div>

    <div class=”mt-3″>

        <label class=”form-label” for=”ImageData”>Image</label>

        <input type=”file” class=”form-control” asp-for=”ImageData” />

    </div>

    <div class=” mt-3″>

        <button type=”submit” class=” btn btn-primary”>save</button>

    </div>

</form>

7. Edit.CSHTML

@*

    For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860

*@

@{

}

@model EmployeePortal.Models.Entities.Employee

<h1>Edit Employee</h1>

@{

    // Define the list of popular cities directly in the view

    var cities = new List<SelectListItem>

    {

        new SelectListItem { Text = “Delhi”, Value = “Delhi” },

        new SelectListItem { Text = “Mumbai”, Value = “Mumbai” },

        new SelectListItem { Text = “Kolkata”, Value = “Kolkata” },

        new SelectListItem { Text = “Bangalore”, Value = “Bangalore” },

        new SelectListItem { Text = “Chennai”, Value = “Chennai” },

        new SelectListItem { Text = “Hyderabad”, Value = “Hyderabad” },

        new SelectListItem { Text = “Pune”, Value = “Pune” },

        new SelectListItem { Text = “Ahmedabad”, Value = “Ahmedabad” },

        new SelectListItem { Text = “Jaipur”, Value = “Jaipur” },

        new SelectListItem { Text = “Lucknow”, Value = “Lucknow” },

        new SelectListItem { Text = “Surat”, Value = “Surat” },

        new SelectListItem { Text = “Kanpur”, Value = “Kanpur” },

        new SelectListItem { Text = “Nagpur”, Value = “Nagpur” },

        new SelectListItem { Text = “Indore”, Value = “Indore” },

        new SelectListItem { Text = “Thane”, Value = “Thane” },

        new SelectListItem { Text = “Bhopal”, Value = “Bhopal” },

        new SelectListItem { Text = “Visakhapatnam”, Value = “Visakhapatnam” },

        new SelectListItem { Text = “Pimpri-Chinchwad”, Value = “Pimpri-Chinchwad” },

        new SelectListItem { Text = “Patna”, Value = “Patna” },

        new SelectListItem { Text = “Vadodara”, Value = “Vadodara” }

    };

}

@if (Model is null)

{

    <h1>employeee was not found with this id</h1>

}

else

{

    <form method=”post” enctype=”multipart/form-data”>

        <div class=”mt-3″>

            <label class=”form-label”>Name</label>

            <input type=”text” class=”form-control” asp-for=”Name” />

        </div>

        <div class=”form-group”>

            <label for=”gender”>Gender</label><br />

            @Html.RadioButtonFor(model => model.Gender, “Male”)

            <label>Male</label>

            @Html.RadioButtonFor(model => model.Gender, “Female”)

            <label>Female</label>

            @Html.RadioButtonFor(model => model.Gender, “Other”)

            <label>Other</label>

        </div>

        <div class=”mt-3″>

            <label class=”form-label”>phone</label>

            <input type=”text” class=”form-control” asp-for=”Phone” />

        </div>

        <div class=”mt-3″>

            <label class=”form-label”>Basic Salary</label>

            <input type=”number” class=”form-control” asp-for=”BasicSalary” id=”BasicSalary” oninput=”calculateTotal()” />

        </div>

        <div class=”mt-3″>

            <label class=”form-label”>HRA</label>

            <input type=”number” class=”form-control” asp-for=”Hra” id=”Hra” oninput=”calculateTotal()” />

        </div>

        <div class=”mt-3″>

            <label class=”form-label”>Convenience</label>

            <input type=”number” class=”form-control” asp-for=”Convenience” id=”Convenience” oninput=”calculateTotal()” />

        </div>

        <div class=”mt-3″>

            <label class=”form-label”>Total Salary</label>

            <input type=”number” class=”form-control” asp-for=”TotalSalary” id=”TotalSalary” readonly />

        </div>

        <script>

            function calculateTotal() {

                const basic = parseFloat(document.getElementById(“BasicSalary”).value) || 0;

                const hra = parseFloat(document.getElementById(“Hra”).value) || 0;

                const convenience = parseFloat(document.getElementById(“Convenience”).value) || 0;

                const total = basic + hra + convenience;

                document.getElementById(“TotalSalary”).value = total.toFixed(2);

            }

        </script>

        <div class=”mt-3″>

            <label class=”form-label” for=”City”>City</label>

            @Html.DropDownListFor(model => model.City, cities, “Select a City”, new { @class = “form-control” })

        </div>

        <div class=”mt-3″>

            <label class=”form-label”>email</label>

            <input type=”email” class=”form-control” asp-for=”Email” />

        </div>

        <div class=”mt-3″>

            <label class=”form-label” for=”ImageData”>Image</label>

            <input type=”file” class=”form-control” asp-for=”ImageData” />

        </div>

    <div class=” mt-3″>

        <button type=”submit” class=” btn btn-primary”>save</button>

            <button type=”submit” class=” btn btn-danger ms-3″ asp-action=”Delete” asp-controller=”Employees” asp-route-id=”@Model.Id”> Delete</button>

    </div>

</form>

}

8. List.cshtml

 
LIST.CSHTML
 
 
@model List<EmployeePortal.Models.Entities.Employee>
 
<h1>Employees</h1>
<a type=”button” class=”btn btn-primary” href=”/Employees/Add” style=”float: right;”>Add</a>
 
<table class=”table”>
    <thead>
        <tr>
            <th>Id</th>
            <th>Name</th>
            <th>Gender</th>
            <th>Email</th>
            <th>Phone</th>
            <th>Basic Salary</th>
            <th>HRA</th>
            <th>Convenience</th>
            <th>Total Salary</th>
            <th>City</th>
            <th>Action</th>
           
        </tr>
    </thead>
    <tbody>
        @foreach (var employee in Model)
        {
            <tr>
                <td>@employee.Id</td>
                <td>@employee.Name</td>
                <td>@employee.Gender</td>
                <td>@employee.Email</td>
                <td>@employee.Phone</td>
                <td>@employee.BasicSalary</td>
                <td>@employee.Hra</td>
                <td>@employee.Convenience</td>
                <td>@employee.TotalSalary</td>
                <td>@employee.City</td>
                <td>
                    <a asp-controller=”Employees” asp-action=”Edit” asp-route-id=”@employee.Id”>Edit</a>
                </td>
            </tr>
        }
    </tbody>
</table>
 
<form method=”get” asp-action=”ExportToExcel”>
    <button type=”submit” class=”btn btn-success”>Export  to Excel</button>
</form>
 
9. SHARED.LAYOUT.CSHTML
 
 
<!DOCTYPE html>
<html lang=”en”>
<head>
    <meta charset=”utf-8″ />
    <meta name=”viewport” content=”width=device-width, initial-scale=1.0″ />
    <title>@ViewData[“Title”] – EmployeePortal</title>
    <link rel=”stylesheet” href=”~/lib/bootstrap/dist/css/bootstrap.min.css” />
    <link rel=”stylesheet” href=”~/css/site.css” asp-append-version=”true” />
    <link rel=”stylesheet” href=”~/EmployeePortal.styles.css” asp-append-version=”true” />
</head>
<body>
    <header>
        <nav class=”navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3″>
            <div class=”container-fluid”>
                <a class=”navbar-brand” asp-area=”” asp-controller=”Employees” asp-action=”List”>EmployeePortal</a>
                <button class=”navbar-toggler” type=”button” data-bs-toggle=”collapse” data-bs-target=”.navbar-collapse” aria-controls=”navbarSupportedContent”
                        aria-expanded=”false” aria-label=”Toggle navigation”>
                    <span class=”navbar-toggler-icon”></span>
                </button>
                <div class=”navbar-collapse collapse d-sm-inline-flex justify-content-between”>
                    <ul class=”navbar-nav flex-grow-1″>
                       
                        <li class=”nav-item”>
                            <a class=”nav-link text-dark” asp-area=”” asp-controller=”Employees” asp-action=”List”>All Employee</a>
                        </li>
                    </ul>
                </div>
            </div>
        </nav>
    </header>
    <div class=”container”>
        <main role=”main” class=”pb-3″>
            @RenderBody()
        </main>
    </div>
 
    <footer class=”border-top footer text-muted”>
        <div class=”container”>
            &copy; 2025 – EmployeePortal – <a asp-area=”” asp-controller=”Home” asp-action=”Privacy”>Privacy</a>
        </div>
    </footer>
    <script src=”~/lib/jquery/dist/jquery.min.js”></script>
    <script src=”~/lib/bootstrap/dist/js/bootstrap.bundle.min.js”></script>
    <script src=”~/js/site.js” asp-append-version=”true”></script>
    @await RenderSectionAsync(“Scripts”, required: false)
</body>
</html>

Thanks And Regards