namespace MVC_Core_Task.Models
{
public class User
{
public int Id { get; set; }
[Required, StringLength(20, MinimumLength = 3)]
public string FirstName { get; set; }
[Required, StringLength(20, MinimumLength = 3)]
public string LastName { get; set; }
[Required, EmailAddress]
public string Email { get; set; }
[Required, StringLength(15, MinimumLength = 6)]
public string Password { get; set; }
[Range(18, 60)]
public int? Age { get; set; }
[Required]
public Gender? Gender { get; set; }
[Required, RegularExpression(@"\d{10}$")]
public string Mobileno { get; set; }
public int CountryId { get; set; }
public int StateId { get; set; }
public int CityId { get; set; }
public string Address { get; set; }
public bool IsDeleted { get; set; } = false;
public Country Country { get; set; }
public State State { get; set; }
public City City { get; set; }
}
public enum Gender { Male, Female }
}
Country.cs
namespace MVC_Core_Task.Models
{
public class Country
{
public int Id { get; set; }
public string Name { get; set; }
}
}
State.cs
namespace MVC_Core_Task.Models
{
public class State
{
public int Id { get; set; }
public string Name { get; set; }
public int CountryId { get; set; }
public Country Country { get; set; }
}
}
City.cs
namespace MVC_Core_Task.Models
{
public class City
{
public int Id { get; set; }
public string Name { get; set; }
public int StateId { get; set; }
public State State { get; set; }
}
}
AppDbContext
using Microsoft.EntityFrameworkCore;
namespace MVC_Core_Task.Models
{
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions options) : base(options) { }
public DbSet<User> Users { get; set; }
public DbSet<Country> Countries { get; set; }
public DbSet<State> States { get; set; }
public DbSet<City> Cities { get; set; }
}
}
UserViewModel.cs
using Microsoft.AspNetCore.Mvc.Rendering;
using MVC_Core_Task.Models;
namespace MVC_Core_Task.ViewModels
{
public class UserViewModel
{
public User User { get; set; }
public List<User> Users { get; set; }
public List<SelectListItem> Countries { get; set; }
public List<SelectListItem> States { get; set; }
public List<SelectListItem> Cities { get; set; }
public int CurrentPage { get; set; }
public int TotalPages { get; set; }
}
}
Program.cs
using Microsoft.EntityFrameworkCore;
using MVC_Core_Task.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Mvc.Rendering;
using MVC_Core_Task.Models;
using MVC_Core_Task.ViewModels;
namespace MVC_Core_Task.Controllers
{
public class UserController : Controller
{
private readonly AppDbContext _context;
private int pageSize = 5;
public UserController(AppDbContext context)
{
_context = context;
}
public IActionResult Index(int page = 1)
{
var users = _context.Users
.Include(x => x.Country)
.Include(x => x.State)
.Include(x => x.City)
.Where(x => !x.IsDeleted)
.Skip((page - 1) * pageSize)
.Take(pageSize)
.ToList();
var vm = new UserViewModel
{
Users = users,
User = new User(),
Countries = _context.Countries.Select(x => new SelectListItem
{
Value = x.Id.ToString(),
Text = x.Name
}).ToList(),
CurrentPage = page,
TotalPages = (int)Math.Ceiling(_context.Users.Count(x => !x.IsDeleted) / (double)pageSize)
};
return View(vm);
}
[HttpPost]
public IActionResult Save(UserViewModel vm)
{
if (ModelState.IsValid)
{
if (vm.User.Id == 0)
_context.Users.Add(vm.User);
else
_context.Users.Update(vm.User);
_context.SaveChanges();
return RedirectToAction("Index");
}
return View("Index", vm);
}
public IActionResult Delete(int id)
{
var user = _context.Users.Find(id);
user.IsDeleted = true;
_context.SaveChanges();
return RedirectToAction("Index");
}
public JsonResult GetStates(int countryId)
{
var states = _context.States
.Where(x => x.CountryId == countryId)
.Select(x => new { x.Id, x.Name })
.ToList();
return Json(states);
}
public JsonResult GetCities(int stateId)
{
var cities = _context.Cities
.Where(x => x.StateId == stateId)
.Select(x => new { x.Id, x.Name })
.ToList();
return Json(cities);
}
}