Model負責獲取數據庫中的資料,並對數據庫中的數據進行處理。

MVC中有關 數據庫 的任務都由Model來完成,Model中對數據資料進行定義,Controller和View中都會參考到Model,從而對數據庫進行增刪改的操作。

    

Model不需要依賴Controller或是View,所以Model的獨立性很高,我們可以把Model獨立出來一個專案。

1,Model中添加實體數據模型

DB中添加新的DataBase:message,添加Table:MessageBoard

USE [message]
GO
/****** Object: Table [dbo].[MessageBoard] Script Date: 08/25/2014 09:42:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MessageBoard](
[ID] [int] IDENTITY(,) NOT NULL,
[msg_name] [nvarchar]() NOT NULL,
[msg_Content] [nvarchar](max) NOT NULL,
CONSTRAINT [PK_MessageBoard] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

新建MVC專案,並從數據庫中添加新的ADO.NET實體數據模型:

        

   

2,添加Service類實現對MessageBoard的CUDR

快捷鍵:Ctrl+M,O折疊代碼定義  Ctrl+M,L展開代碼定義  Ctrl+K,S添加外側代碼

新建Service文件夾並添加類:

類中實現對MessageBoard的增刪改查:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MvcApplication2.Models; namespace MvcApplication2.Service
{
public class messageDBService
{
//實例化實體數據
MessageEntities database = new MessageEntities(); #region Create Function
//Create方法,參數是 name 和 content
public void Create(string name, string content)
{
//實例化 一條數據
MessageBoard NewMsg = new MessageBoard(); NewMsg.msg_name = name;
NewMsg.msg_Content = content; //實例化對象添加到 database中
database.MessageBoards.Add(NewMsg);
//儲存
database.SaveChanges();
} //Create 方法重載,參數是 MessageBoard類型的記錄
public void Create(MessageBoard NewMsg)
{
//實例化對象添加到 database中
database.MessageBoards.Add(NewMsg);
//儲存
database.SaveChanges();
}
#endregion #region Update Function
//update ,參數是傳遞過來的id,name,content
public bool Update(int id, string name, string content)
{
//檢查id對應的記錄是否存在
MessageBoard msg = database.MessageBoards.Find(id);
if (msg != null)
{
msg.msg_name = name;
msg.msg_Content = content;
database.SaveChanges(); return true;
}
else
{
return false;
}
}
//update ,參數是 MessageBoard
public bool Update(MessageBoard msgUpd)
{
//檢查id對應的記錄是否存在
MessageBoard msg = database.MessageBoards.Find(msgUpd.ID);
if (msg != null)
{
msg.msg_name = msgUpd.msg_name;
msg.msg_Content = msgUpd.msg_Content;
database.SaveChanges(); return true;
}
else
{
return false;
}
}
#endregion #region Delete Function
public bool Delete(int id)
{
MessageBoard msgDel = database.MessageBoards.Find(id);
if (msgDel != null)
{
//Delete
database.MessageBoards.Remove(msgDel); return true;
}
else
{
return false;
}
}
#endregion #region Query Funcion
//返回所有message
public List<MessageBoard> GetList()
{
List<MessageBoard> msgList = database.MessageBoards.ToList();
return msgList;
}
//一條記錄
public MessageBoard getMessage(int id)
{
MessageBoard msg = database.MessageBoards.Find(id);
return msg;
} #endregion } }

以上我們看到了Model的作用:把數據通過Entity從數據庫中拉過來,新增類實現對數據的處理

3,Model-Controller-View之間關係的建立

1,Controller中新增messageController

2,新增ViewModel文件夾,並添加IndexViewModel.cs文件

3,Ctrl+Shit+B重建解決方案以後,messageController中右鍵點擊Index()添加View,我們選擇IndexViewModel

4,這樣M-V-C之間的關係就出來了:M(indexViewModel)—V(index.cshtml)—C(messageController)

4,ViewMode介紹

ViewModel從字面上看就是給View用的Model.

View頁面最上面的引用如下,只能引用一個Model,但是View頁面的屬性中往往會用到多張Table中的字段屬性。

所以我們建立View對應的Model,命名為ViewModel,把需要的屬性都整合在一起供View使用。

@model MvcApplication2.ViewModels.IndexViewModel

ViewModel包含的內容:

  • 定義View所需要的字段屬性
  • 包含屬性的驗證規則
  • 可以有多個不同的資料庫實體組合
  • 定義顯示模板(DisplayFor,EditFor,LabelFor)的介面樣式

Model Validate

      ViewModel中對從View傳遞過來的字段的值 可以按照一定的規則進行驗證其是否符合規範,例如是否是正確的郵箱地址

常用的驗證如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations; namespace MvcApplication2.ViewModels
{
public class IndexViewModel
{
//1,[DisplayName] View中顯示Title屬性對應的名稱為必修課
[DisplayName("必修课")]
public string Title { get; set; } //2,[Required] Name字段不能為空,如果為空將提示ErrorMessage
[Required(ErrorMessage = "學生姓名必須填寫")]
public string Name { get; set; } //3,[StringLength] 定義字符串的長度,ErrorMessage顯示不符合長度的錯誤信息
[StringLength(, ErrorMessage = "長度必須在2-10個字符之間", MinimumLength = )]
public string Course { get; set; } //4,[Range]定義數值範圍
[Range(, , ErrorMessage = "分數必須在0-100之間")]
public int Score { get; set; } //5, [Compare]和另外的一個字段比較是否一直
[Compare("re_password", ErrorMessage = "兩次密碼輸入不一致")]
public string password { get; set; }
public string re_password { get; set; } //6,[RegularExpression] 更具正則表達式進行驗證
[RegularExpression(@"^(\d{3,4}-)?\d{7,8})$|(13[0-9]{9}", ErrorMessage = "請輸入正確的手機號碼")] //:(^(\d{3,4}-)?\d{7,8})$|(13[0-9]{9})
public string Phone { get; set; } //7,[EmailAddress] Email格式驗證
[EmailAddress(ErrorMessage = "請填寫正確的Email格式")]
public string StuMail { get; set; } //8,[Url] 網址驗證
[Url(ErrorMessage = "網址格式錯誤")]
public string url { get; set; } //[FileExtensions] 文件格式檢查,預設格式:.png,.jpg,.jpeg,.gif
[FileExtensions(ErrorMessage = "上傳文件格式錯誤")]
public string file { get; set; } //[CreditCard] 信用卡卡號檢查
[CreditCard(ErrorMessage = "信用卡格式錯誤")]
public string creditCard { get; set; } //[DataType] 字段類型檢查
[DataType(DataType.Date)]
public DateTime date { get; set; } }
}

ASP.NET MVC 4.0 学习3-Model的更多相关文章

  1. ASP.NET MVC 4.0 学习5-ActionResult

    一,Controller簡介 Controller擔任了資料傳遞的角色,負責流程控制,決定存取哪個Model以及決定顯示哪個View頁面,即ASP.NET MVC中有關於『傳遞』的任務皆由Contro ...

  2. ASP.NET MVC 4.0 学习6-Model Binding

    一,ViewData,ViewBag與TempData ASP.NET MVC架構中,通過繼承在Controller中的ViewData,ViewBag和TempData和View頁面進行資料的存取, ...

  3. ASP.NET MVC 4.0 学习2-留言板實現

    新增專案實現留言板功能,瞭解MVC的運行機制 1,新增專案   2,添加數據庫文件message.mdf   Ctrl+W,L 打開資料庫連接,添加存放留言的Atricle表 添加字段,後點擊&quo ...

  4. ASP.NET MVC 4.0 学习1-C#基础语法

    1,方法多載,相同的方法名稱,不同的參數類型.數量 class Program { static void Main(string[] args) { Program newObject = new ...

  5. ASP.NET MVC 4.0 学习4-Code First

    之前我們需要用到的數據,通過添加Entity實體數據模型把數據庫中需要的Database拉到項目中如下圖, 而就是Code First就是相對於這種處理數據的方法而言的 Code First更加準確的 ...

  6. 系列文章--从零开始学习ASP.NET MVC 1.0

    从零开始学习ASP.NET MVC 1.0 (一) 开天辟地入门篇 从零开始学习 ASP.NET MVC 1.0 (二) 识别URL的Routing组件 从零开始学习 ASP.NET MVC 1.0 ...

  7. 从零开始学习ASP.NET MVC 1.0

    转自:http://www.cnblogs.com/zhangziqiu/archive/2009/02/27/ASPNET-MVC-1.html <从零开始学习ASP.NET MVC 1.0& ...

  8. 返璞归真 asp.net mvc (8) - asp.net mvc 3.0 新特性之 Model

    原文:返璞归真 asp.net mvc (8) - asp.net mvc 3.0 新特性之 Model [索引页][源码下载] 返璞归真 asp.net mvc (8) - asp.net mvc ...

  9. 2.第一个ASP.NET MVC 5.0应用程序

    大家好,上一篇对ASP.NET MVC 有了一个基本的认识之后,这一篇,我们来看下怎么从头到尾创建一个ASP.NET MVC 应用程序吧.[PS:返回上一篇文章:1.开始学习ASP.NET MVC] ...

随机推荐

  1. 正式学习react(二)

    今天把上一篇还没学习完的 webpack部分学习完: 之前有说过关于css的webpack使用.我们讲了 ExtractTextPlugin 来单独管理css讲了module.loaders下关于 c ...

  2. block(四)揭开神秘面纱(下)

    看此篇时,请大家同时打开两个网址(或者下载它们到本地然后打开): http://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/BlocksRuntim ...

  3. 图铭Android平台银行卡号识别系统

    随着智能终端(智能手机及平板电脑)及移动通信(3G)的发展,原来运行在PC上的信息系统(如邮件系统.即时通信.网页浏览.协同办公.网络购物.社交网站.博客等)逐渐转移到智能终端设备上.可以预见未来几年 ...

  4. 《Programming WPF》翻译 第7章 1.图形基础

    原文:<Programming WPF>翻译 第7章 1.图形基础 WPF使得在你的应用程序中使用图形很容易,以及更容易开发你的显卡的能力.这有很多图形构架的方面来达到这个目标.其中最重要 ...

  5. 继承Object和ContextBoundObject处理效率上的差距

    继承Object和ContextBoundObject处理效率上的差距 ContextBoundObject一个很熟悉的对象,它提供对象有处理上下文的能力:通过它能够方便地实现AOP处理机制.它带来好 ...

  6. JS的substr与substring的区别

    substr返回从指定位置开始的指定长度的子字符串 str.substr(star[,length])  第二个参数可选,不选的话,截取到最后,如果length为0或者负数,那么返回的将是一个空字符串 ...

  7. HDU1841——KMP算法

    这个题..需要对KMP的模板理解的比较透彻,以前我也只是会套模板..后来才知道..之会套模板是不行的..如果不能把握模板的每一个细节`,至少能搞清楚模板的每一个模块大体是什么意思.. 题意是给出两个串 ...

  8. paip.输入法编程---智能动态上屏码儿长调整--.txt

    paip.输入法编程---智能动态上屏码儿长调整--.txt 作者Attilax ,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csd ...

  9. Unity 安卓下DLL热更新一(核心思想)

    大家都知道一谈起热更新的话首选是Ulua这个插件, 其实Unity可以使用dll热更新的,如果你实在不想用Lua来编写逻辑,0.0请下看Dll+AssetBundle如何实现热更新的.让你看完这个文章 ...

  10. Git源码管控规范

    Git分支示意圖 Master:主分支.形成稳定的版本时,才将代码合并到Master分支 Relase:网站发布的分支.通过验证的Bug和功能需求,才合并到Release分支,并将稳定的版本进行备份 ...