《Pro ASP.NET MVC 3 Framework》学习笔记之一【MVC的历程,优点,HelloWorld】-attach

序论:asp.net mvc出现已经有两三年的时间了(2009开始1.0版本),但是这么方面的中文学习资料仍然非常少,特别是asp.net mvc3,几乎就没有中文的学习书籍。在英文的书籍中有两本是非常经典的mvc3教程:《Professional ASP.NET MVC 3》–作者:Jon Galloway , Phil Haack, Brad Wilson , K. Scott Allen《Pro ASP.NET MVC 3 Framework》–作者:Steven Sanderson。我正在看的是后面这本。虽然勉强能看明白点,但为了以后查阅方便,也希望能给那些跟我一样初学MVC3又不太愿意去看英文版资料的朋友一点帮助,所以将每天学习的内容记录下来,肯定会有很多欠缺的地方,还请路过的大牛们指正!

本文:目前刚看完前三章,以下是我对前三章内容的一个归纳

第一章:介绍了web开发的经历的阶段,主要是asp.net的版本发展。asp.net的出现似乎将winform的开发方式平移到了web开发,微软为我们提供了大量的服务端控件,因为大量控件的出现,为我们屏蔽了HTTP的无状态性,甚至是HTML都自动为我们生成好了。所以asp.net学习入门非常简单,但是想深入却是很困难。传统的webforms发展到现在也暴露出了很多的缺陷,asp.net mvc的出现很好的解决了。webforms的缺点大致有以下几个方面:

1.ViewState问题,导致在浏览器和服务端反复来回传递,影响页面呈现的效率

2.页面生命周期:页面生命周期的一部分:连接客户端事件和服务端事件处理代码的机制非常复杂,只有少数的开发人员能够完全掌握并去操控。

3.不能很好的分解关注点,MVC一直贯彻的思想是:约定胜于配置,分解关注点

4.对HTML操控受限,我们知道服务端控件最终也是以HTML的形式呈现,但往往不是我们认为必要的,而且不能很好的应用CSS样式。比如ID为发生变化,当然在4.0里面有了设置ID的呈现模式。

5.Leaky abstraction:直译是抽象泄漏,我不知道怎么翻译合理,我理解的意思是抽象不完全,WebForms试图在任何可能的地方隐藏HTTP和HTML的细节。当我们实现自己的逻辑时,常常容易偏离的抽象,也因此强制我们去对回发机制进行反向工程,或者是很笨拙的去实现生成我们期望的HTML。另外,所有的这些抽象会成为令组件开发人员沮丧的包袱。

6.可测试性弱

在asp.net mvc之前有了Rails,asp.net mvc不仅继承了Rails的优点,而且进行了扩充,有了更多的方便的功能。

相对于的asp.net mvc1.0和2.0在asp.net mvc3.0里面新增了一个视图引擎Razor,代码块的标记也从<% %>变成了@,新的标记符号@使得更方便写和编译,也方便了单元测试。

第二章的内容基本都是开发前的环境配置,asp.net mvc3需要我们另外安装,VS2010自带的是MVC2。

第三章是一个简单的例子,我将操作的步骤和代码分享如下:

首先,创建一个新的MVC3项目

选择

创建完以后出现了asp.net mvc3的默认的项目结构

这个时候我们运行程序,会出现404错误,因为我们这时还没有添加任何Controller,添加第一个Controller:

在mvc的架构中,处理请求的是Controllers,在asp.net mvc中,Controllers都是简单的C#类(通常继承了System.Web.Mvc.Controller基类),在Controllers中每一个public Method称为Action Method,这意味着你可以通过URL来调用它。MVC约定:将所有的controllers放在一个名字为Controllers的文件夹下(MVC处处体现着约定胜于配置),当我创建mvc项目时,开发环境已经自动为我们生成好了。

添加Controller,如下图所示:

 

修改HomeController类如下:

        public string Index()
{
return "Hello World";
}

到这里程序就可以运行不报404错误了,运行后会在浏览器里面显示“Hello World”。这里会提到Routes(路由),MVC程序也使用了ASP.NET routing system:决定URL怎样映射到实际的Controller和Action。当我们创建mvc项目时,已经添加了默认的路由,按照根目录: /    Controllers: /Home  Action:Index的格式或者说是约定。当我们在浏览器输入http://localhost/或者http://localhost/Home时会得到Hello World。当然我们可以在Global.asax.cs自定义路由规则。上面的Action只是返回一个字符串,如果要对浏览器响应一个HTML页,这就需要我们创建View了

修改Index如下:

        public ViewResult Index()
{
return View();
}

通过MVC的View方法返回一个ViewResult类型的对象,这里没有给View()添加任何参数,所以返回默认的View。如果此时运行程序,会报如下错误:

从上面的错误页面可以发现MVC寻找View的顺序是怎样的,因为这里没有创建Index对应的View所以会报错。下面创建View,只需在Index的方法里面右键添加视图就可以了,如下图:

 

添加如下代码:

@{
Layout = null;
}





Index



Hello World(from the view)


再一次运行:浏览器显示Hello World(from the view)

小结一下:第一次我们的Index Action返回就是一个字符串,而第二次返回的是ViewResult,这个时候就会告诉MVC执行一个View并返回HTML,但是我们这里并没有告诉浏览器返回哪一个View,我们只是在Index里面写了return View(),前面说了,MVC里面处处贯彻了一个思想:约定胜于配置,这里就是一个约定:View的名字跟Controller里面Action的名字一样,这里是Index,所以这里会自动去呈现View的名字为Index的HTML给浏览器。Action的返回类型统称为ActionResult,这里具体的是ViewResult,还有像RedirectResult(用于重定向)等等。

好了,明天接着记笔记,我也是初学MVC,肯定有很多理解不准确或者错误的,还请路过的大牛们多多指导。

晚安!

发表评论

电子邮件地址不会被公开。 必填项已用*标注