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
Thanks And Regards