1、顯示全名——邏輯層
2、使用紅色標識年齡大於50的。使用簡單邏輯改變了HTML元素的外觀——邏輯層
ViewModel
面對可能的問題,微軟就會提供解決該問題的方法,提出ViewModel,ViewModel是ASP.NET MVC應用中的隱式聲明的層,用來維護Model和View之間的數據傳遞,是View的數據容器。
Model和ViewModel區別
Model是業務相關數據,是由業務和數據結構構建的模型,而ViewModel 是視圖相關的數據,是根據View創建。
工作原理流:
1、用戶提出需求,Controller處理用戶的交互邏輯,執行簡單的判斷。
2、Controller獲取一個或者多個Model數據
3、Controller決策使用哪個View最符合用戶請求
4、Controller將根據Model數據和View需求創建並初始化ViewModel對象
5、Controller將ViewModel數據以ViewData或者ViewBag或者強類型的View等對象傳遞到View中,並返回View。
ViewModel分別與View,Model關聯方式:
View將變成ViewModel的強類型的View,Model卻和ViewModel是互相獨立的,Controller將根據Model對象創建並初始化ViewModel對象。
1、在項目中創建一個叫ViewModels的文件夾。
2、在ViewModels中新建一個TeacherViewModel
爲了更好的掌握ViewModel,決定將年齡用不同的顏色顯示,當前用戶也要在View中顯示。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Mvc_一.ViewModels
{
public class TeacherViewModel
{
public string TeacherName { get; set; }
public int TeacherId { get; set; }
public int TeacherAge { get; set; }
public string TeacherAgeColor { get; set; }
public string UserName { get; set; }
}
}
3、在上節例子中的強View類型修改爲TeacherViewModel
@model Mvc_一.ViewModels.TeacherViewModel
4、使用下面的代碼替換掉View的內容
@model Mvc_一.ViewModels.TeacherViewModel
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>GetTeacherView</title>
</head>
<body>
Hello @Model.UserName
<hr />
<div>
<b>Teacher Details:</b><br />
Teacher Name:@Model.TeacherName<br />
Teacher Id:@Model.TeacherId<br />
<span style="background-color:@Model.TeacherAge"> Teacher Age:@Model.TeacherAge</span>
</div>
</body>
</html>
5、在GetTeacherView中,獲取Model數據並且強制轉換爲ViewModel對象。
public ActionResult GetTeacherView()
{
Teacher t = new Teacher();
t.TeacherName = "John";
t.TeacherId = 101010;
t.TeacherAge = 55;
TeacherViewModel tViewModel = new TeacherViewModel();
tViewModel.TeacherName = t.TeacherName;
tViewModel.TeacherId = t.TeacherId;
tViewModel.TeacherAge = t.TeacherAge;
if (tViewModel.TeacherAge > 50)
{
tViewModel.TeacherAgeColor = "Red";
}
else
{
tViewModel.TeacherAgeColor = "Black";
}
tViewModel.UserName = "Administrator";
return View("GetTeacherView",tViewModel);
}
6、測試結果,此View中不包含任何業務邏輯
A | explian:
1、每個View都有其對應的ViewModel。
2、努力將Model和ViewModel相互獨立。
3、儘管ViewModel包含與Model幾乎相同的屬性,微軟建議每次都創建一個ViewModel,讓每個View都對應一個ViewModel。
4、如果一個View只顯示Model數據不包含任何呈現邏輯,不創建ViewModel就會無法滿足未來的需求,倘若未來需要添加新的數據,開發人員就必須從頭開始創建全新的UI。
轉載請標明出處 http://blog.csdn.net/jasonhds/ 版權所有,翻版必究~謝謝合作!