View Model:
Some Question are emerge which are following
- Where I should put my presentation logic
- Where I should put my Data transmission logic
- How I can create a view with multiple models.
Practical Implementation:
Step 1: Create Two Model Classes( Employee.cs and User.cs)
namespace ViewModel.Models
{
public class Employee
{
public string EmployeeName { get; set; }
public string Address { get; set; }
public DateTime DataofBirth { get; set; }
public int Salary { get; set; }
}
}
namespace ViewModel.Models
{
public class User
{
public string UserName { get; set; }
}
}
Step 2: Create a controller names Employee
public class EmployeeController : Controller
{
//
// GET: /Employee/
public ActionResult Index()
{
Employee emp = GetEmployee();
ViewBag.CurrentUser = GetUserName();
return View(emp);
}
public User GetUserName()
{
User u = new User();
u.UserName = "Yogesh";
return u;
}
private Employee GetEmployee()
{
Employee e = new Employee();
e.EmployeeName = "Ganesha";
e.Address = "Pratap Nagar";
e.DataofBirth = new DateTime(1983, 4, 3);
e.Salary = 10000;
return e;
}
}
Step 3. Add Index(Index.cshtml) View
@model ViewModel.Models.Employee
@{
Layout = null;
}
@{
ViewModel.Models.User CurrentUser = ViewBag.CurrentUser;
}
Employee Details
@Model.EmployeeName
@Model.Address
@Model.DataofBirth
@Model.Salary
Age:
@{
int age = DateTime.Now.Year – Model.DataofBirth.Year;
if(Model.DataofBirth>DateTime.Now.AddYears(-age))
{
age–;
}
@age
}
Salary:
@{
if (Model.Salary>20000)
{
@Model.Salary
}
else
{
@Model.Salary
}
}
Step 4. Run the Program and See the output
Step5 . Now We will create View Model
Create a Class (EmployeeVM) into Models folder and write following Code
namespace ViewModel.Models
{
public class EmployeeVM
{
public Employee emp { get; set; }
public User userobj { get; set; }
public EmployeeVM(Employee e1, User u2)
{
emp = e1;
userobj = u2;
}
public int Age
{
get
{
int age = DateTime.Now.Year - emp.DataofBirth.Year;
if(emp.DataofBirth>DateTime.Now.AddYears(-age))
{
age--;
}
return age;
}
}
public string SalaryColor
{
get
{
if(emp.Salary>20000)
{
return "Orange";
}
else
{
return "Red";
}
}
}
}
}
Step 6: Make changes in Employee Controller as following
namespace ViewModel.Controllers
{
public class EmployeeController : Controller
{
//
// GET: /Employee/
public ActionResult Index()
{
Employee emp = GetEmployee();
//ViewBag.CurrentUser = GetUserName();
User CurrentUser = GetUserName();
EmployeeVM empobj = new EmployeeVM(emp, CurrentUser);
//return View(emp);
return View(empobj);
}
public User GetUserName()
{
User u = new User();
u.UserName = "Yogesh";
return u;
}
private Employee GetEmployee()
{
Employee e = new Employee();
e.EmployeeName = "Ganesha";
e.Address = "Pratap Nagar";
e.DataofBirth = new DateTime(1983, 4, 3);
e.Salary = 10000;
return e;
}
}
}
Step 7 Make Changes in Index.cshtml
@*@model ViewModel.Models.Employee*@
@model ViewModel.Models.EmployeeVM
@{
Layout = null;
}
@*@{
ViewModel.Models.User CurrentUser = ViewBag.CurrentUser;
}*@
@*
*@
Employee Details
@*
@Model.EmployeeName
@Model.Address
@Model.DataofBirth
@Model.Salary
*@
@Model.emp.EmployeeName
@Model.emp.Address
@Model.emp.DataofBirth
@Model.emp.Salary
@*
Age:
@{
int age = DateTime.Now.Year – Model.DataofBirth.Year;
if(Model.DataofBirth>DateTime.Now.AddYears(-age))
{
age–;
}
@age
}
*@
Age:@Model.Age
@*
Salary:
@{
if (Model.Salary>20000)
{
@Model.Salary
}
else
{
@Model.Salary
}
}
*@
Salary:
@Model.emp.Salary
Step 8 : Now Run and Execute the program and see the results.
