本文目标

1.了解"模型"、"视图"、"控制器"的创建、调试和使用过程。

本文目录

1.创建模型

2.创建视图

3.创建控制器

4.调试

5.使用模型、视图、控制器

1.创建模型

在文件夹"Models"中创建新类,如下图所示:

1、命名:Model的命名规则一般以Model结尾,如:以业务为主的命名UserModel或以页面为主的命名LoginModel。

2、作用:开发过三层的朋友都知道,我们在表示层、业务逻辑层、数据操作层进行数据传输的时候会用到的DTO一般都单独建立成名称为Model的类库项目。其实此处的Models文件夹中的类与我们曾经用到的数据传输对象本质上是一致的。当然也会有些区别,我们后面再说。

3、代码示例:

 1 /*
2 *
3 * 创建人:李林峰
4 *
5 * 时 间:2013-2-24
6 *
7 * 描 述:用户模型
8 *
9 */
10
11 using System;
12
13 namespace MVC3.Demo.Models
14 {
15 //以业务为主的用户模式
16 public class UserModel
17 {
18 public int UserID { get; set; } //用户编号
19 public string UserName { get; set; } //用户名
20 public string Password { get; set; } //密码
21 public int Sex { get; set; } //性别,0男,1女
22 public int Age { get; set; } //年龄
23 public int Political { get; set; } //政治面貌
24 public int Height { get; set; } //身高
25 public int Weight { get; set; } //体重
26 public string Graduated { get; set; } //毕业院校
27 public string Professional { get; set; } //专业
28 public DateTime GraduatedDate { get; set; } //毕业日期
29 public string Address { get; set; } //现住地址
30 public string Phone { get; set; } //联系电话
31 public string ImagePath { get; set; } //头相地址
32 public string Other { get; set; } //其他描述
33 }
34
35 //以页面为主的用户登陆模型
36 public class LoginModel
37 {
38 public string UserName { get; set; } //用户名
39 public string Password { get; set; } //密码
40 }
41 //以页面为主的用户注册模式
42 public class RegeditModel
43 {
44 public string UserName { get; set; } //用户名
45 public string Password { get; set; } //密码
46 public int Sex { get; set; } //性别
47 public int Age { get; set; } //年龄
48 }
49 }

2.创建视图

在创建视图以前我们先要创建一个名称为User的文件夹,在User文件夹中创建视图("Add"-->"View"),如下图所示:

1、名称:同以往的名称一样,以页面的功能为主,此处为:Login。

2、模板引擎:此处选择Razor(原因请看我的上一篇文章)。

3、创建强类型视图:此处勾选后一拉列表中会自动罗列出我们已建的模型(注意:这里显示的只是Build以后的,有时候刚刚建立完Model在此处是没有的,Build以后才可以出现),如我们刚才建立的三个Model都会在此处显示。勾选与不勾选的区别仅仅在于创建后的View文件中是否存在与Model关联的代码,这点在代码块中我会加注释说明。

4、框架模板:只有选择了Model class后此项才是可选的,其中有“创建、删除、详细、编辑、空、列表”选择项,当选择了其中的某项模板后VS2010会自动生成对应Model的操作代码。该功能实际上是VS2010的一个View代码生成器。

5、创建部分页:与传统的aspx页面UserControl作用是一样的,可以一次创建应用在不同的View中。

6、选择母板页:可选择是否选择母板页

7、代码示例:

 1 @model MVC3.Demo.Models.LoginModel
2 <!--如果是创建强类型的视图并选择了LoginModel,上面的代码则由vs自动生成,仅仅是一段代码,手写的效果是一样的,所以一般情况我不会勾选“强类型视图”-->
3 @{
4 Layout = null;
5 }
6 <!--Layout用于母板页的布局,在本系列的第四篇文章中会详细讲解-->
7 <!DOCTYPE html>
8 <html>
9 <head>
10 <title>用户登陆</title>
11 </head>
12 <body>
13 <!--Html.BeginForm()等同于在html代码里写<form>.....</form>是一样的-->
14 @using (Html.BeginForm())
15 {
16 <div>
17 用户名:
18 </div>
19 <div>
20 <!--创建用户名文本框,等同于<input type="text" />-->
21 @Html.TextBoxFor(model => model.UserName)
22 </div>
23 <div>
24 密码:
25 </div>
26 <div>
27 <!--创建用户名文本框,等同于<input type="password" />-->
28 @Html.PasswordFor(model => model.Password)
29 </div>
30 <div>
31 <input type="submit" value="登录" />
32 </div>
33 }
34 </body>
35 </html>

3.创建控制器

在Control文件夹中创建"UserController",如下图所示:

1、名称:必须以Controller结尾。

2、模板:其中有三项可选,分别为“空、使用EF、直接读写”,功能类似代码生成器,选择后VS2010自动在创建的类中添加方法代码块。

3、代码示例:

 1 /*
2 *
3 * 创建人:李林峰
4 *
5 * 时 间:2013-2-24
6 *
7 * 描 述:用户控制器
8 *
9 */
10
11 using System;
12 using System.Collections.Generic;
13 using System.Web;
14 using System.Web.Mvc;
15
16 namespace MVC3.Demo.Controllers
17 {
18 public class UserController : Controller
19 {
20 ////系统自动生成,可以删除
21 //public ActionResult Index()
22 //{
23 // return View();
24 //}
25
26 //登陆控制器
27 public ActionResult Login()
28 {
29 return View();
30 }
31 }
32 }

4、UserControl中包含一个方法Login执行Views/User/Login.schtml并返回。

4.调试

1、调试:MVC与传统的ASPX页面不同,不能通过“鼠标右键-->浏览”直接浏览视图。调试MVC要在“MVC3.Demo项目-->右键点击属性”设置起始页,如下图所示:

2,运行效果:按F5运行,加断点与传统的ASPX页面一样,如下图所示。

5.使用模型、视图、控制器

1.修改LoginControl代码如下:

 1 /*
2 *
3 * 创建人:李林峰
4 *
5 * 时 间:2013-2-24
6 *
7 * 描 述:用户控制器
8 *
9 */
10
11 using System;
12 using System.Collections.Generic;
13 using System.Web;
14 using System.Web.Mvc;
15
16 namespace MVC3.Demo.Controllers
17 {
18 public class UserController : Controller
19 {
20 ////系统自动生成,可以删除
21 //public ActionResult Index()
22 //{
23 // return View();
24 //}
25
26 //登陆控制器
27 public ActionResult Login()
28 {
29 return View();
30 }
31
32 [HttpPost]//登陆控制器
33 public ActionResult Login(Models.LoginModel loginModel)
34 {
35 if (loginModel.UserName == "张三" && loginModel.Password == "123456")
36 Response.Write("正确!");
37 else
38 Response.Write("不正确!");
39 return View();
40 }
41 }
42 }

在LoginControl中存在两个同名方法Login,无参数的是在用户通过地址栏打开登陆窗口时的方法,加了[HttpPost]的方法是用户点击提交时处理回发时的方法。

2、MVC执行流程图(粗略):

3、本例执行流程:

  • 用户在地址栏里输入http://localhost/User/Login
  • 服务端路由解析地址
  • 找到Contorls中UserContorl的Login方法(如果是回发则执行带有[HttpPost]的方法)
  • 执行逻辑,此处为判断用户名和密码
  • 返回相应的视图

MVC入门教程二[第一个小Demo](转载)的更多相关文章

  1. 无废话MVC入门教程二[第一个小Demo]

    mvc技术交流,欢迎加群: 本文目标 1.了解"模型"."视图"."控制器"的创建.调试和使用过程. 本文目录 1.创建模型 2.创建视图 ...

  2. MVC入门教程

    MVC入门系列教程-视频版本,已入驻51CTO学院,文本+视频学效果更好哦.视频链接地址如下: 点我查看视频.另外,针对该系列教程博主提供有偿技术支持,群号:226090960,群内会针对该教程的问题 ...

  3. 无废话MVC入门教程笔记

    自学mvc,看了园子里李林峰写的李林峰写的无废话MVC入门教程笔记,现在有的平时忽略的或是不太清楚的点记下来 1,Html.DropDownList //服务端写法 @{ //下拉列表的值 List& ...

  4. 无废话ExtJs 入门教程二十[数据交互:AJAX]

    无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...

  5. PySide——Python图形化界面入门教程(二)

    PySide——Python图形化界面入门教程(二) ——交互Widget和布局容器 ——Interactive Widgets and Layout Containers 翻译自:http://py ...

  6. JasperReports入门教程(二):中文打印

    JasperReports入门教程(二):中文打印 背景 在上一篇中我们介绍了JasperReport的基本入门,也展示了一个报表.但是我们的示例都是使用的英文,如果我们把需要打印的数据改为中文会怎么 ...

  7. Spring MVC 入门教程示例 (一)

    今天和大家分享下  Spring MVC  入门教程 首先还是从 HelloWorld  web 工程开始 -------------------------- 1.首先创建一个Maven Web工程 ...

  8. 模仿京东顶部搜索条效果制作的一个小demo

    最近模仿京东顶部搜索条效果制作的一个小demo,特贴到这里,今后如果有用到可以参考一下,代码如下 #define kScreenWidth [UIScreen mainScreen].bounds.s ...

  9. mongodb入门教程二

    title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...

随机推荐

  1. 【面试题】2018年最全Java面试通关秘籍汇总集!

    [面试题]2018年最全Java面试通关秘籍汇总集!(转载于互联网)   前几天在交流群里有些小伙伴问面试相关的试题,当时给出了一些问题,苦于打字太累就没写下去了,但觉得这是一个很不负责任的表现,于是 ...

  2. 【JavaScript】setinterval和setTimeout的区别

    计时器setTimeout()与setInterval()是原生JS很重要且用处很多的两个方法, 但很多人一直误以为是相同的功能: 间隔时间重复执行传入的句柄函数. 但实际上, 并非如此, 既然JS给 ...

  3. LOJ #6283. 数列分块入门 7-分块(区间乘法、区间加法、单点查询)

    #6283. 数列分块入门 7 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给出 ...

  4. 深入了解HTTP协议

    1.HTTP协议简介 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准. 1.1背景 设计HT ...

  5. (7) go 函数

    1.格式 调用 2.包 (1)包 本质 文件夹.每一个文件都必须属于一个包 (2)给包取别名 (3)函数的首字母大小,决定是否能被外包访问 (3) 3.多返回值 4.递归 5.基本数据类型和数组都是拷 ...

  6. SpringBoot整合SpringBatch实用简例

    SpringBatch主要是一个轻量级的大数据量的并行处理(批处理)的框架. 作用和Hadoop很相似,不过Hadoop是基于重量级的分布式环境(处理巨量数据),而SpringBatch是基于轻量的应 ...

  7. JSON APIs and Ajax

    1. 通过jQuery来绑定点击事件. 函数 $(document).ready()这个函数中的代码只会在我们的页面加载时候运行一次,确保执行js之前页面所有的dom已经准备就绪. 在$(docume ...

  8. VB查询数据库之登陆窗体——机房收费总结(一)

    机房收费系统已经做了很长一段时间了,虽然到目前为止,仍然没有结束,但已经结节尾声了.我感觉现在有必要回首总结一下整个机房收费系统. 除了结账做了一半,报表接触一点之外,其他的都基本上差不多了.从做过的 ...

  9. [bzoj3244][noi2013]树的计数 题解

    UPD: 那位神牛的题解更新了,在这里. ------------------------------------------------------------------------------- ...

  10. 概率dp学习记录

    论文参考 汤可因<浅谈一类数学期望问题的解决方法> 反正是很神奇的东西吧..我脑子不好不是很能想得到. bzoj 1415 1415: [Noi2005]聪聪和可可 Time Limit: ...