不用到处找资料,2天掌握Asp.net Mvc 3(上)


事实上,但凡你感兴趣希望了解一下的东西,微软往往已经准备了很齐全的教程。比如Asp.net Mvc 3,完全可以在官网上,将MusicStore的教程跟着做一遍。在这个过程中,同时记录下你的感受,则开发简单的应用,这些知识基本上能够搞定了。实际开发中遇到其他的问题,在官网上大体也能够找到答案。
另外,先找到教程边做边学和先学再用,是省时间的法门,通常微软的一些东西都能在两天左右掌握。如果简单看看就开始干活,期望中间逐步学习掌握,这个一般要浪费十倍以上的时间,无论用什么东西干活,再聪明的人你也得先有个基本的概念,这就需要一个1到1周的学习过程。
当然,这样一步一步的教程,你可以在Asp.net Mvc官网上找到,使用Asp.net Mvc3和Razor脚本的,包括Intro to ASP.NET MVC 3和ASP.NET MVC Music Store两篇,我个人觉得跟着后面那篇实际动手做一遍就行了,前面那篇无需浪费时间。一共有10课,以下简单的记录实作过程。
学习的过程中完全可以作弊,即一些代码如果很明白直接拷贝过来就行。需要强调的是,每个步骤的含义要明白、每行代码的含义要明白。
第一课 创建项目 开始时间2月4日14:00 预期30分钟 14:23结束。
这一课主要讲两个问题,项目要做什么:一个音乐商店,换句话说是卖唱片之类的网上商店。功能方面,网民可以分类查看商品,加入购物车,并实现模拟的支付。管理员能够添加新的商品。That's all,这基本上是做典型的小型网上商店的主要需求。
创建项目的过程很简单,注意这里创建的是一个“空的”Asp.net Mvc3的项目,创建完之后可以看看,除了Content目录下有网站的一些默认的样式和图片之外,神马都没有。之所以创建这样空的项目而不是使用项目模版,让VS帮助我们实现基本的首页、登录、注册、注销之类的功能,大约是为了让我们从最底层了解代码和编程方式。
这里要注意的要点只有一个:Asp.net Mvc的默认目录,这些目录下即使没有任何东西,也需要创建,一个Mvc应用会在Controller目录下寻找控制器、会在Views目录下寻找View,不需要在编程的时候写完整的路径。所以这是Asp.net Mvc开发Web应用的约定。简单的说,这些目录非有不可。
第二课 控制器 开始时间14:23 预期60分钟 15:06分结束 中断4分钟
这一课主要讲怎样为应用添加控制器、在浏览器中如何访问相应的控制器里的相关方法。
如何添加控制器:在Controller目录,右键,添加控制器即可。
1、控制器是什么?实际上是Url,举例来说,http://localhost:1826/Home/Index,对应HomeController的Index方法,我们在浏览器中输入这个地址,则该方法会执行。看看自动生成的代码,这里一般是返回一个视图,本课则用一个返回字符串的方法取代,这样执行的时候,网页上就会显示这个字符串。当然,如果只输入http://localhost:1826/Home/,则默认的使用Index方法,如果连Home也省略掉输入http://localhost:1826,则默认的使用Home控制器。这些同样是约定,没什么道理可说,只是为了方便。
2、控制器的方法名称约定:只问方法名称,不问方法的参数和返回值。上面可以看到,系统生成的index是返回一个View,改成返回字符串的Index,运行时照样能够找到这个方法。
3、方法的参数:另外一个控制器StoreController包括三个方法,分别是Index、Browse和Detail,在浏览器中输入http://localhost:1826/Store/Browse?Genre=Disco,为StoreController的Browse方法提供了一个参数:Disco。在浏览器中输入http://localhost:1826/Store/Details/5,则为Details方法的Id提供了一个参数5.不过,你若是http://localhost:1826/Store/Browse/Disco,这样参数是不能传到的,原因见4.
4、返回字符串的时候,Browse方法使用了HttpUtility.HtmlEncode,防止js注入攻击。http://localhost:1826/Store/Browse/Disco这种情况下将不能获得参数。
string message = HttpUtility.HtmlEncode("Store.Browse, Genre = " + genre);
所以总结一下:控制器和Action、参数三者,是构成网站Url的三个部分,其中若不提供控制器名称,则默认的使用HomeController,不提供方法名称则默认的使用Index方法。参数有两种形式,当接受的参数为字符串的时候,要使用HttpUtility.HtmlEncode防范Js注入攻击。
这里,可以看看本课最后的总结。
第三课 View和ViewModels 15:15分开始 预期100分钟 16.40结束
本课讲解如何添加视图和ViewModels
1、视图和控制器的关系:控制器一般推送一个视图给浏览器。前面的Controller中,我们每个Action返回一个字符串,浏览器显示该字符串。但我们最终仍然还是要自行的生成Html,这就是View的任务。我们并非是在手写htm,而是夹杂着Razor脚本,用来访问服务器资源。从这个角度来说,博客园的DUDU版主提及的没有必要使用Mvc,其理由是站不住脚的。
2、如何添加View:我们先将Home的Index方法恢复原状,即返回ActionResult,同时Return View(),然后在这个方法的代码上,右键,添加视图。一个名为Index.cshtml的视图就会创建。
请注意,这里Return View()的View构造方法有多个重载,使用默认的构造方法,将导致该控制器在Views\Home\下面寻找与Action也就是这个方法同名的视图,也就是我们刚刚生成的Index.cshtml。这就是前面提到的目录路径和文件名的约定,只是约定而已,目的是让我们的编程更简单些。
index.cshtml这样的文件和以前的Aspx没什么不同,是夹杂脚本的文件,服务器未来将依据其得到htm、css和js,浏览器呈现。
生成的视图代码很简单,前面的三行是Razor语法的说明,用来指定该视图在浏览器里显示时的标题。后面一行则简单的htm语法,显示一行文本。
3、修改_Layout.cshtml ,这个是站点公用的模版。在Views\Shared目录下面。实际上要关注的是,使用@RenderBody(),来呈现各个视图。我们需要在网站的顶部显示两个链接,一个到首页一个到Store,那么,先直接在Body这里Render之前加入

ASP.NET MVC MUSIC STORE




4、调整样式:直接从http://mvcmusicstore.codeplex.com下载MvcMusicStore-Assets.zip,打开压缩包,将包里的Content目录拖放到解决方案中。这里只是覆盖了site.css并加入了几个图标,样式已经由这个项目组先制作好了。现在的站点看起来像模像样的了。
5、使用Model传送信息给View:先在Model里增加两个类,Genre用来表达商品的类型,现在我们只需要一个Name属性。Album类,包括包括一个标题和它属于那个类型,两个属性。
然后,编译这个项目,让开发环境知道增加了这两个类,我们再为StoreController的三个方法增加视图。
6、最后,Store的index视图必须能够转到Details和Browse视图,这个通过修改index的Views很容易做到。
到目前为止,我们在顶部有两个链接,其中Store的index方法包含一个类型列表,点击这个列表中的每个成员,都进入相应的Browse页面。
总结一下:如何为控制器的某个Action创建视图?如何为视图指定Models?如何在视图中呈现某个对象或某个集合?
Tags: 

延伸阅读

最新评论

发表评论