ASP.NET MVC 3 Model【通過一簡單實例一步一步的介紹】


今天主要講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的驗證方面的知識我會盡快補上,晚安!!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM