《从零开始学习ASP.NET MVC 1.0》 文章导航

  • (一) 开天辟地入门篇
  • (二) 识别URL的Routing组件
  • (三) Controller/Action 深入解析与应用实例
  • (四) View/Model 全解
  • (五) ViewEngine 深入解析与应用实例

一.摘要

随着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的官网看看:

http://www.asp.net/mvc/

这里我们可以下载ASP.NET MVC的安装文件.目前最新版本是1.0,另外我们可以在CodePlex上获取源代码:

http://www.codeplex.com/aspnet

在官网上下载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.寻找入口方法

首 页网站的地址应该是 http://localhost:1847/home/index (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 parametersnew { controller = "Home", action = "Index", id = "" }  // Parameter defaults);}protected void Application_Start(){RegisterRoutes(RouteTable.Routes);}

关于Routing的深入了解将在以后介绍, 这里我们完全可以照葫芦画瓢, 按照实例添加新的重写规则.

最后, http://localhost:1847/home/index 就被解析为:

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的各种细节做具体的讲解.希望大家喜欢本系列文章!

作者:张子秋
出处:http://www.cnblogs.com/zhangziqiu/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/xwj517537691/archive/2013/05/07/3064042.html

从零开始学习ASP.NET MVC 入门相关推荐

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

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

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

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

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

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

  4. [转载]从零开始学习jQuery (一) 开天辟地入门篇

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 本篇文章是入门第一篇, 主要是简单介绍jQuer ...

  5. ASP.NET MVC 入门

    入门基础 ASP.NET MVC 是微软系列基于 C# 语言的 Web 开发框架,并不适合 0 基础入门,在学习之前你必须要了解 4 个知识点: 1.HTML 基础.网页的基本标签,结合 ASP.NE ...

  6. 1、ASP.NET MVC入门到精通——新语法

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 在学习ASP.NET MVC之前,有必要先了解一下C#3.0所带来的新的语法特性,这一点尤为重要,因为在MVC项目中我们利用C#3.0的新特 ...

  7. ASP.NET MVC 入门系列教程

    一个居于ASP.NET MVC Beta的系列入门文章,有朋友提议说写一个示例程序来同步讲解,那样更加容易学习.所以就写选择了写一个Blog程序来作为示例程序.(原来是居于ASP.NET MVC Pr ...

  8. 从零开始学习ASP.NET MVC1.O (第一章)

    一.摘要 随着ASP.NET MVC 1.0版本的正式发布, 我将本系列文章也更新到了1.0, 对于已经发表的文章我都会根据1.0版本重新编辑. 希望本系列文章能打给大家帮助.   二.前言 ASP. ...

  9. 学习ASP.NET MVC的资料推荐

    学习ASP.NET MVC的资料推荐      1.微软官方ASP.NET MVC QuickStart文档.http://quickstarts.asp.net/previews/mvc/      ...

最新文章

  1. activemqcpp编译及可能的错误处理
  2. 基于Java的RDMA高性能通信库(二):Java Socket Over RDMA
  3. 【Tree】Prim算法思想与步骤
  4. 深入理解Spring MVC Controller返回String类型导致中文乱码的问题。
  5. 具有InlfuxDB的Spring Boot和Micrometer第2部分:添加InfluxDB
  6. Django请求响应对象
  7. C#LeetCode刷题之#35-搜索插入位置(Search Insert Position)
  8. NOIP2000单词接龙[DFS]
  9. weblogic IllegalArgumentException 解决办法
  10. 《SpringBoot实战》笔记1
  11. spring cloud构建互联网分布式微服务云平台-服务提供与调用
  12. VC6.0新建工程——Win32 Application和Win32 Console Application
  13. 计算机与汉字+输入速度+云输入法,计算机汉字三码输入法的制作方法
  14. mobile terminal 笔记
  15. 关于物流项目面试可能会被问到的20题总结
  16. PMP ITTO 和 4W1H
  17. 给定一个数组,求数组的最大连续子数组,使得该子数组的和最大
  18. Vue3 Hooks 模块化抽离
  19. linux基础——信号阻塞及未决信号
  20. 解决回溯法 - 回溯到底是个什么东西(含有大量经典例题加详细分析)

热门文章

  1. 一维数组转化为二维数组(java)
  2. Stanford CoreNLP遇到的问题
  3. Transformer介绍
  4. 损失函数——交叉熵损失函数
  5. dnf公共频道服务器不稳定已从初始化状态,合区前兆?DNF公共频道开启跨区添加好友服务...
  6. jmeter一个线程组多个请求_分享一些我在实际项目中使用jmeter压测的一些技术点跟一些踩过的坑吧...
  7. php腾讯云+视频上传失败,腾讯云视频上传和播放尝试总结
  8. java biginteger使用_在Java中使用BigInteger值
  9. unity3d collider自动调整大小_3dmax室内模型导入Unity3d快速烘焙光照【2020】
  10. php pdo mysql类源码_php pdo数据库类(提取自微擎的pdo方式处理数据库类库)