一.摘要
随着ASP.NET MVC 1.0版本的正式发布, 我将本系列文章也更新到了1.0, 对于已经发表的文章我都会根据1.0版本重新编辑. 希望本系列文章能打给大家帮助.
 
二.前言
ASP.NET MVC是微软官方提供的开源MVC框架. 在经过了漫长的preview和2个RC版本后, 终于发布了1.0版本.其实从RC开始ASP.NET MVC的核心代码就已经趋于稳定.所以现在开始学习ASP.NET MVC是一个很好的时间点.学习的早,而且不用担心知识过时.
本系列教程是我在学习ASP.NET MVC时的总结, 比如虽然我学习老赵的视频教程, 但是因为版本较老, 一般我都要从最新版本上进行知识的校验与升华, 然后将最后的精华总结出来写成文字. 现在还在不断的学习, 不断地写作.希望大家喜欢本系列文章, 我将用精益求精的精神写本系列文章.
三.Hello ASP.NET MVC
现在开始跟着我一步一步学习ASP.NET MVC.在什么都不知道之前, 还是让我们先下载一个ASP.NET MVC程序. 当看到程序运行后, 我的心才会踏实很多.
首先去ASP.NET MVC的官网看看:
[url]http://www.asp.net/mvc/[/url]
这里我们可以下载ASP.NET MVC的安装文件.目前最新版本是1.0,另外我们可以在CodePlex上获取源代码:
[url]http://www.codeplex.com/aspnet[/url]
在官网上下载ASP.NET MVC安装文件, 一路回车完成安装. 启动VS2008 SP1(不是VS2008?不是SP1?作为一个专业的IT人士,水平可以菜,软件咱一定要用新的!去找个新版本吧!),点击新建,在Web中可以找到:


 
点击确定即创建了一个默认的MVC项目.同时还会创建一个测试项目. 这些我现在都不懂也不关注, 直接将Web项目中的default.aspx设置为启动页, 运行项目, 一个ASP.NET MVC的项目已经运行在我的电脑上了:
 
 
而且那个Home和About还能点击!虽然现在我什么都不懂, 不过看着能运行的实例, 心里就踏实多了!
四.学习MVC的概念
一个ASP.NET页面通常需要做这些事情:
1 获取一个页面需要的数据.
2 在页面的Page_Load(页面加载)方法中为我们的页面控件绑定数据
3 浏览器显示页面
MVC即Model, View, Controller
Model就是我们1中获取的网页需要的数据
Controller就是我们获取数据,然后将数据绑定到页面控件的这个业务流程.不十分正确但是可以先这样理解: Controller就是我们的Page_Load方法逻辑.
View就是我们的aspx页面,注意这是一个不包含后台代码文件的aspx页面.(其实带有.asp.cs文件也不会有编译错误,但是这样写代码就违背了MVC的设计初衷)
下面这张图很好的概括了MVC的作用:
 
 
一个URL请求, ASP.NET MVC引擎会分析这个URL要使用那个Controller, 这个Controller(实际上真正的方法是Controller的Action)从数据库或者其他数据源获取数据,通常这些数据是一个业务的模型类(即MVC中的Model). Controller将Model对象传递给页面(即MVC中的View),  页面显示在浏览器上.(这一步是ViewEngine的功能, 我们一般的ASPX页面使用的是WebForm的ViewEngine,当然也可以替换.)
五.学习实例首页
简单的概念也有了.实例也能运行了.现在就是看看这个实例是如何使用ASP.NET MVC的.从首页下手.
1.寻找入口方法
首页网站的地址应该是 [url]http://localhost:1847/home/index[/url] (1847是端口号,随机生成,所以会不同), 为什么地址不是具体的页面但是最后却将请求提交给了view/home/Index.aspx 页面? 很明显是使用了URL重写. ASP.NET中叫做UrlRouting,对应的程序集是System.Web.Routing, 打开项目的Global.asax.cs文件, 会找到我们建立的页面重写规则:
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );
}
protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
 
关于Routing的深入了解将在以后介绍, 这里我们完全可以照葫芦画瓢, 按照实例添加新的重写规则.
最后, [url]http://localhost:1847/home/index[/url] 就被解析为:
Controller为Home, Action为Index, 没有id参数.
2.寻找Controller
在Controllers文件夹下我们可以找到HomeController.cs, 这里使用了一个约定, 就是如果URL中获取到的Controller名字是Home, 则他的Controller类名就是HomeController. 在URL中的名字后加上”Controller”.
实例中Controller都放在Controllers文件夹, 所以我们可以按照命名约定很容易就可以找到HomeController类
3.寻扎Action
打开HomeControllers.cs, 发现里面有两个方法:
        public ActionResult Index()
        {
            ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
        }
public ActionResult About()
        {
            return View();
        }
其中的Index和About都是Action.这个Action是个什么东东呢?目前我只知道一个Controller可以包含多个Action, MVC模式中Controller角色的具体实现逻辑都是在Action中的.
因为我们的Action是Index, 所以自然就要调用Index()方法.这里将"Webcome to ASP.NET MVC!", 这里的Model角色就是这句话, 也就是一个字符串对象.
Controller的一个重要作用就是将Model对象传递给View,也就是具体的页面. 传递的方法就是将这个字符串放到ViewData这个集合对象中, 然后在页面上也调用这个对象获取数据. 这个ViewData 对象一定是静态的, 或者至少是和HttpContext对象关联的, 否则到了View页面上是不能够调用的.但是也不知道ASP.NET MVC是在什么时候创建了这个对象.有心深入的一会去源代码里找找就能找到答案了.
4.寻找View
Model有了,数据有了, 接下来要跳转到View去显示数据了.第一个问题就是如何从Controller中跳到View上? return View() 这句话实现了此功能.其实如果这样写大家会更清楚:
        public ActionResult Index()
        {
            ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View("index");
        }
View方法中可以带一个名字, 这个名字就是View的名字.如果把index改成about,那么访问/home/index就会跳转到about页!
虽然知道了我们要返回到名称是"index"的View上, 但是这个View的页面在哪里呢?在Web中有一个Views文件夹:
 
 
这里面存放的都是View对象, 也就是只有显示功能的aspx页面文件.但是aspx文件要遵循约定: Views下面要按照Controller创建文件夹, 比如HomeController就对应Home文件夹, 然后在里面添加view, 比如index.aspx, 那么在HomeController中返回到名为Index的View对象实际就会返回Views/Home/Index.aspx页面.
如果不写View的名字, 则认为Action的名称就是View的名称.
5.页面展示
最后的工作就是View页面使用Model数据完整页面显示工作, 在index.aspx这个没有后台代码的View对象中, 通过ViewData对象获取Model:
<%= Html.Encode(ViewData["Message"]) %>
 
接下来ViewEngine即页面引擎会将aspx中的HTML部分以及上面的数据部分和在一起返回给浏览器.
关于View对象我注意到此页面是继承自System.Web.Mvc.ViewPage而不是直接继承自System.Web.UI.Page, 而这个ViewData对象就是ViewPage中的一个属性. 这里的ViewData一定是页面级别的,当页面编译完毕这个对象就会被注销(HTTP是无状态的协议,每次请求其实都是生成一个新的ViewPage对象).
六.总结
虽然仅仅是第一篇入门文章, 但是是不是觉得已经会用ASP.NET MVC了? 虽然学习不可以骄傲, 但是可以自豪的是ASP.NET MVC我已经不再陌生, 即使不能驾轻就熟, 偶尔说出来几个概念,给你解释解释啥是MVC, 还是很能吓唬人的. 在后续文章中,我将对MVC的各种细节做具体的讲解.希望大家喜欢本系列文章!

转载于:https://blog.51cto.com/bochuangpeixun/146985

从零开始学习ASP.NET MVC1.O (第一章)相关推荐

  1. 《从零开始学习ASP.NET MVC 1.0》-开天辟地入门篇

    <从零开始学习ASP.NET MVC 1.0> 文章导航 (一) 开天辟地入门篇 (二) 识别URL的Routing组件 (三) Controller/Action 深入解析与应用实例 ( ...

  2. 从零开始学习ASP.NET MVC 入门

    <从零开始学习ASP.NET MVC 1.0> 文章导航 (一) 开天辟地入门篇 (二) 识别URL的Routing组件 (三) Controller/Action 深入解析与应用实例 ( ...

  3. 走向ASP.NET架构设计--第一章:走向设计

    走向ASP.NET架构设计--第一章:走向设计 前言:很多做开发的人都在不断的摸索着,积极的学习,试图找出一条走向架构设计的成功法则.每当有人问起我们的职业,我们也常常在说:"软件设计&qu ...

  4. 从零开始学习ASP.NET MVC 1.0 (一)

    从零开始学习ASP.NET MVC 1.0 (一) MVC1.0下载地址:http://www.microsoft.com/download/en/details.aspx?id=5388 博客园:h ...

  5. R语言学习笔记——入门篇:第一章-R语言介绍

    R语言 R语言学习笔记--入门篇:第一章-R语言介绍 文章目录 R语言 一.R语言简介 1.1.R语言的应用方向 1.2.R语言的特点 二.R软件的安装 2.1.Windows/Mac 2.2.Lin ...

  6. 冈萨雷斯《数字图像处理》学习总结及感悟:第一章 绪论 百闻不如一见

    ☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░ 一.引言 好几月前开始自学OpenCV-Python,但老猿以前没接触过图像基础知识, ...

  7. 从零开始学习 ASP.NET MVC 1.0 (三) Controller/Action 深入解析与应用实例 【转】

    一.摘要 一个Url请求经过了Routing处理后会调用Controller的Action方法. 中间的过程是怎样的? Action方法中返回ActionResult对象后,如何到达View的? 本文 ...

  8. c基础学汇编语言,王爽《汇编语言》学习笔记、习题(第一章 基础知识)

    汇编语言的组成 汇编语言发展至今,有以下3类指令组成: 1.汇编指令:机器码和助记符,没有对应的机器码. 2.伪指令:没有对应的机器码,由编译器执行,计算机并不执行. 3.其他符号:如+.-.*./等 ...

  9. 强化学习蘑菇书Easy RL第一章

    强化学习第一章(蘑菇书) 强化学习的概念 之前也学过一点,但是不够系统,想利用这一次机会好好把一些概念理顺清楚. 第一部分肯定是强化学习的概念问题.强化学习(reinforcement learnin ...

最新文章

  1. 分析两小段c++代码 关于unsigned运算的坑
  2. usaco Combination Lock
  3. ionic+angularjs开发hybrid App(环境配置+创建测试项目)
  4. [译]Kinect for Windows SDK开发入门(九):骨骼追踪进阶 下
  5. 判断元素是否在ndarray_暨南大学药学院考研~手性的判断与相关介绍
  6. gui linux 桌面应用,吃掉Linux开发者,WSL支持GUI应用
  7. 又是一年国庆假期最后一天
  8. vue 中 provide 和 inject 共享数据
  9. python生成器next_Python生成器生成next,python,yieldnext
  10. 分布式唯一id生成器的想法
  11. python 中文分析句子成分_中文句子结构分析
  12. 计算机毕业设计指导 教师 评语,毕业设计指导教师评语【集锦】
  13. ShowWindow函数用法。
  14. codeforces topcoder 指南
  15. MCS51 程序存储器(ROM)
  16. c语言字母是怎么存储,C语言之数据在内存中的存储
  17. WR720N改造记录1
  18. 聊聊大学室友在 TikTok 的工作和生活体验
  19. 结构体与动态内存(5.11)
  20. 2019CCPC网络赛部分题解

热门文章

  1. 从系统盘符选错到认识硬盘的各种分区
  2. 思科 GNS3 配置 NAT 端口映射
  3. JavaScript中的shift()、unshift()和pop()函数
  4. Docker的主要作用
  5. 《回答sort一例》-linux命令五分钟系列之二十八
  6. 使用记事本编写xml文件保存出现异常原因
  7. rsync 安装 配置 实例
  8. DebugDiag调试工具
  9. Hessian Spring相关使用的简单例子
  10. 使用javac编译时碰到的问题