今天主要講Model的兩個方面:
1. ASP.Net MVC 3 Model 簡介 通過一簡單的事例一步一步的介紹
2. ASP.Net MVC 3 Model 的一些驗證
MVC 中 Model 主要負責維持數據狀態,將數據從數據存儲器中檢索並傳遞給控制器,客戶端傳送過來的數據通過處理后再傳回數據存儲系統中。是MVC中較為重要的一層。
這里為什么說是數據存儲器而不是數據庫,我們以前經常說的就是重數據庫中增刪改查數據等等什么的,但是 MVC 的Model 不單單只能在數據庫中操作數據也能通過其他方式操作數據。學過java的ssh三大框架的人都應該知道hibernate 框架吧!java 中的hibernate框架就是ORM的典型應用!咱們.net 平台也有些訪問數據庫的框架比如說ling to sql Entity Framework NHibernate 等。所以說呢不是操作數據庫而是操作數據存儲器。
下面用一個簡單的事例演示一下
本實例用list模擬一些person類的對象然后再view 層中顯示出來。
1. 首先先在Model層中新建一個Person 類。
1 namespace Mvc3App1.Models 2 { 3 public class Person 4 { 5 public string IdCard { get; set; } 6 public string Name { get; set; } 7 public string Sex { get; set; } 8 public int Age { get; set; } 9 } 10 }
此Person類簡單了定義了幾個屬性。注意第一行的命名空間Mvc3App1.Models 一會在Controller 中會用到。
2. 新建一個Controller 在這我就不截圖了因為前面有一篇專講Contoller 的文章不了解Controller 的請您先看下Controller的文章 ASP.Net MVC 3 Controller
2.1 首先如果在Controller中用Model層中的實體類首先必須引入命名空間
using Mvc3App1.Models;
2.2 在Index() 這個Action 方法中定義一個List 集合 然后給它初始化幾個對象。
1 public ActionResult Index() 2 { 3 //新建一個泛型集合然后給他初始化一些數據 4 List<Person> persons = new List<Person> 5 { 6 new Person { IdCard = "001", Name = "張三", Age = 21, Sex = "男"}, 7 new Person { IdCard = "002", Name = "李四", Age = 21, Sex = "男"}, 8 new Person { IdCard = "003", Name = "王麻子", Age = 21, Sex = "男"}, 9 new Person { IdCard = "004", Name = "趙六", Age = 21, Sex = "男"}, 10 }; 11 return View(persons); 12 }
2.3 添加一個View
ok 到此為止,View - Controller - Model 都已經創建完畢,下面咱接着看View層的結構。
1 @model Mvc3App1.Models.Person 2 3 @{ 4 ViewBag.Title = "Index"; 5 } 6 7 <h2>Index</h2>
看第一行,就是將Action 返回的結果存到model中但是,咱返回的是一個List集合那怎么辦呢?好辦用集合接收不就完事了,再這提醒您一句如果您看不懂@符號是干什么使的,我建議您先看一下我前面講 Razor 視圖的兩篇文章 ASP.NET MVC 3 Razor 視圖引擎 基本語法 ASP.NET MVC 3 Razor 視圖引擎 布局
好下面咱就先解決第一個問題怎么用集合接受
@model IEnumerable<Mvc3App1.Models.Person>
用IEnumerable接收就 ok 了,有人問它是什么東東,告訴您 公開枚舉器,該枚舉器支持在指定類型的集合上進行簡單迭代 List ArrayList 等 就實現的該接口。
1 @model IEnumerable<Mvc3App1.Models.Person> 2 @using Mvc3App1.Models; 3 4 @{ 5 ViewBag.Title = "Index"; 6 } 7 8 <h2>人員信息表</h2> 9 <ul> 10 <li style = "list-style-type:none; font-weight:bold">編號-姓名</li> 11 @* 這里Person用var關鍵字也行,嘿嘿 用.net2.0 習慣了 *@ 12 @foreach (Person person in Model) 13 { 14 <li>@person.IdCard-@person.Name</li> 15 } 16 </ul>
12 - 14 行 foreach 遍歷輸出
寫着這么多了先看下運行結果吧!
數據返回到View層了,那么View層怎么將參數傳給Controller 好下面咱再添加一個Detaile 用於顯示詳情的Action
1 public class MTestController : Controller 2 { 3 //新建一個泛型集合然后給他初始化一些數據 4 private List<Person> persons = new List<Person> 5 { 6 new Person { IdCard = "001", Name = "張三", Age = 21, Sex = "男"}, 7 new Person { IdCard = "002", Name = "李四", Age = 21, Sex = "男"}, 8 new Person { IdCard = "003", Name = "王麻子", Age = 21, Sex = "男"}, 9 new Person { IdCard = "004", Name = "趙六", Age = 21, Sex = "男"}, 10 }; 11 public ActionResult Index() 12 { 13 return View(persons); 14 } 15 16 public ActionResult Detaile(string id) 17 { 18 Person person = persons.Find(p=>p.IdCard == id); 19 return View(person); 20 } 21 22 }
為了數據共享將4-9行虛擬的數據提到方法外面去,Detaile方法接受一個id參數,為了不再修改路由就可以直接運行這里就用id代表IdCard。然后調用List集合中的find方法查詢。
再看一下Detaile 的View 層是怎么寫的吧!
@model Mvc3App1.Models.Person @{ ViewBag.Title = "Detaile"; } <h2>詳細信息</h2> 編號:@Model.IdCard 姓名:@Model.Name 性別:@Model.Sex 年齡:@Model.Age
很簡單不再做額外的解釋,好下一步改寫Index 的View層代碼
將foreach中的語句改為
<li>@person.IdCard-@Html.ActionLink(person.Name,"Detaile",new {id=person.IdCard})</li>
簡單說就是給姓名文本加一個a標簽 (超鏈接)但是這個標簽和以前的有點不同,這就是MVC 為了簡化代碼,出的HTML helper 但是今天的主角不是它,我簡單的說先上面這行語句就行了
Html.ActionLink 從英語單詞上不難理解它就代表一個超鏈接,其中第一個參數是超鏈接的文本- 第二個參數的轉向那個Action 及 Action 的名字,第三個是傳的參數。
看下運行結果吧!
Index
Detaile
由於時間關系今天就寫到這了,關於Model的驗證方面的知識我會盡快補上,晚安!!!!