当前位置: 首页 > news >正文

第0课 从0开始

ASP.NET MVC开发模式和传统的WebForm开发模式相比,增加了很多"约定"。

直接讲这些 "约定" 会让人困惑,而且东西太多容易忘记。

和微软官方教程不同,笔者尽量不用脚手架,从空白框架开始,一步一步添加功能,每次添加的东西刚好够用,让大家能真正能用起来,理解每一个过程。

文章提纲

  • 概述
  • 核心概念介绍
  • 从空白开始,建立一个基本框架详细步骤

概述

  1. 本系列文章及文章中的例子主要基于微软官方文档
  2. 使用工具 : VS2013 + MS SQL 2012
  3. 开始主要讲解MVC + EF搭配使用,后续同样也会提供MVC + ADO.NET的实现方案

核心概念介绍

MVC,Model – View – Controller 的简写

Model 封装业务逻辑相关的数据及对数据的处理方法

View 向用户提供交互界面

Controller 负责控制Model和View

看下面这张图。目前只要理解这一个概念就可以了,下面就开始建一个空框架,从做中学。

 

从空白开始,建立一个基本框架详细步骤

  1. 新建项目

 

 

NOTE:模板要选Empty,如果直接选MVC会产生多余代码。

NOTE:上图方框处正好对应于M, V, C

到此为止,就建立了一个最基本的MVC解决方案,基本是空的。

我们简单介绍下其中的RouteConfig.cs文件

打开Global.asax, 注意到在程序启动的时候注册了路由规则,如下方框处。

下面我们就看下具体的路由规则。打开RouteConfig.cs文件

注意到里面有个静态方法,这就是映射路由的控制,这个方法定义了路由规则。

其中:url: "{controller}/{action}/{id}"定义了URL的格式。

后续会结合实际的URL地址来讲解。

 

  1. 添加一个示例

先不管Model, 我们先创建Controller和View

  1. 添加Controller

右键Controllers文件夹,按图示添加。

控制器必须以Controller结尾(这是ASP.NET MVC的一个约定)。

后续文章会讲用户登录的例子,所以这里先建一个AccountController.

添加后会发现多了下图方框处的类和文件夹。

我们打开新建的AccountController.cs看下,自动生成了一个方法

public ActionResult Index()

{

return View();

}

我们称这个Index为一个Action,返回类型为ActionResult.

可以看到,这个Action返回了一个View, 我们现在来建立这个View

  1. 添加View

添加View有两种方法,一种是直接在Views文件夹下添加(右键ViewsàAccount文件夹)

另外一种是通过Controller中的Action来添加。这次我们采用后一种方法。

打开AccountController, 右键Index方法,按图示添加。

这样就添加了一个和特定的Controller和Action(这里指AccountController和Index)相对应的View(ViewsàAccountàIndex.cshtml)

 

这个View就是最终显示的前端页面,我们在Body里面添加一行字。

右键Index.cshtml,在浏览器中查看可以看到熟悉的HTML界面了。

注意浏览器中的地址 xx/Account/Index

这个地址与开头的路由规则(url: "{controller}/{action}/{id}")就对应了起来,应该很容易理解吧。

 

典型的一个执行过程。

  1. 网址路由比对
  2. 如成功,执行相应的Controller与Action
  3. 执行相应的View并返回结果

记住这个过程。后面的过程都会在这个简单的过程中进行扩展。

 

总结

MVC比之前的WebForm开发方式做了很大改变,分离更彻底。

本次文章主要是让大家建立ASP.NET MVC的基本观念。

下篇文章主要介绍View的UI设计,介绍一些重点的HtmlHelper, 从前端开始容易看到效果。

后续所有的文章都会以这个示例进行扩展,有问题欢迎大家评论:)

相关文章:

  • Table转换Div+CSS_工具下载
  • 创网杯知识竞赛的软件源码
  • PHP扩展之STOMP-安装
  • IP地址获得主机名称
  • python class和class(object)用法区别
  • Eclipse Error Cannot change version of project facet Dynamic Web Moudle to 3.0
  • asp.net控件开发基础(1)
  • (八十八)VFL语言初步 - 实现布局
  • js中包含中文注释引起的错误
  • CSS3选择器:nth-child与:nth-of-type区别
  • 数据集成在ODS项目的应用模式
  • hadoop无法启动DataNode问题
  • 解决ajax.net 1.0中文乱码问题
  • 如何动态添加菜单/菜单项、子菜单、右键菜单
  • java泛型中?和T区别
  • [PHP内核探索]PHP中的哈希表
  • 时间复杂度分析经典问题——最大子序列和
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • 【个人向】《HTTP图解》阅后小结
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Android系统模拟器绘制实现概述
  • Git学习与使用心得(1)—— 初始化
  • MD5加密原理解析及OC版原理实现
  • PAT A1017 优先队列
  • Sublime Text 2/3 绑定Eclipse快捷键
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 测试如何在敏捷团队中工作?
  • 成为一名优秀的Developer的书单
  • 聚类分析——Kmeans
  • 坑!为什么View.startAnimation不起作用?
  • 前端临床手札——文件上传
  • 前端性能优化——回流与重绘
  • 什么软件可以剪辑音乐?
  • 算法系列——算法入门之递归分而治之思想的实现
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • No resource identifier found for attribute,RxJava之zip操作符
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • Java性能优化之JVM GC(垃圾回收机制)
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 数据可视化之下发图实践
  • # 透过事物看本质的能力怎么培养?
  • #define、const、typedef的差别
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (八)Spring源码解析:Spring MVC
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (一)插入排序
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET Framework杂记
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • @Service注解让spring找到你的Service bean
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术
  • [Android]使用Retrofit进行网络请求