asp.net mvc2的环境搭建就比mvc1简单多了,直接安装 mvc2安装文件就可以了
安装前确认当前系统已经安装了 .net framework3.5+sp1 / vs2008+sp1 以上
MVC2 框架安装完成以后我们就可以开始我们的 MVC之旅了,呵呵
本次学习内容:Route
首先 route 的中文意思就是我们常说的“路由”,确实这里也是这个意思,在我们MVC中已经不再使用 XX.aspx来访问页面了,
所有页面的请求会通过route来解析找到对应的控制器(controller)里面对应的操作(action)来执行的。
mvcapplication项目新建完成后,会默认生成一个 route,在 Global.asax.cs文件中,我们可以看到

routes.MapRoute 方法就是提供给我们映射一个路由的,我们可以看到默认路由的参数和自带的参数解释
1、Default:路由名称
2、{controller}/{action}/{id}:这是 url解析格式 ,大括号括起来的是需要解析的参数 {controller}是找到对应的控制器,{action}是控制器里面的对应的方法,
{id}是默认提供的一个参数名,类似我们以往的 http://xXX.com/abc.aspx?id=XXX这url里面的id参数
这段就是根据URL格式找到控制器和执行哪个action的重点:
如 http://localhost:12345/Home/Index/2,这里则根据上面的规则解析,找到Home这个controller,并执行home里面的Index方法,并且方法参数 id的值是2
3、new
上面就是对默认的一个映射参数的解释也就是默认的一个解析URL格式的配置,呵呵,微软这个功能实在太妙了,这样就把业务逻辑和页面分开了,我们可以通过修改这里的配置,来解析URL执行我们想要执行的业务代码、展示页面。
下面我们可以自己定义一个规则来解析我们所需要的url格式 如:

这里我为新添加的一个 route 起了个名字 叫 "myRoute",
我规定的 url 格式 是 "myRoute/{dt}",刚才上面提到被大括号括起来的值是参数,而不括起来的则可以看成字符串,后面 dt 是一个参数,这里我没有 在这个规则上写上
{controller} 和 {action}2个参数,这是系统就会找到下面默认提供的参数
"new
下面就是需要添加 MyController 控制器 和 MyAction 方法;
代码如下

这里可以看到
启动我们程序后,在地址栏里输入 http://localhost:2235/myRoute/2010-1-10
就可以看到页面输出:
大家是不是感觉route 很爽了,感觉用起来随心所欲嘛,嘿嘿~
注意:这里新建的路由要写在Default那个默认路由的上方,还要把项目重新生成一下才能有效果。
上次我们说到了 route 路由的功能,整个mvc运行过程:
Route(路由) -->Controller(控制器)-->action(方法)
这次我们要说的就是 controller 控制器 和action:
控制器的作用就是:当一个 Request 来的时候,首先Route 解析 找到了 对应控制器,控制器再根据

首先: 控制器类 必须继承 Controller,这个我们新建controller 的时候都已经给我们继承好了,这里我们起了一个名字叫“MyController”;
这里控制器命名规则 最后需要是Controller,如:TestController……
这个控制器里面我们写了2个方法,首先第一个 MyAction,接收的参数是 DateTime型的dt,这里我们第一个笔记已经说到了url 规则里面的{dt}参数,这里我们这样接收到我们url里面所传递的参数;返回类型是
ViewResult:一般呈现某个aspx文件,由View方法返回。
RedirectToResult:使浏览器重定向,由Redirect方法返回。
RedirectToRouteResult:直接交给下一个Action,由RedirectToAction方法返回。
ContentResult:以文字形式返回
上面是常用的几种还有些 JSONResult/javascriptReulst 了,大家可以看一下Result就可以了
MyAction 是以 文字形式的结果返回,则当我们输入
http://localhost:2235/myRoute/2010-1-10
则会接收到页面传递过来的 2010-1-10 作为 dt参数 传递给 MyAction 方法,并返回一段文字。
而下面的 MyTest()方法 没有返回值,一样可以被我们 mvc route解析到执行
我们在地址栏输入
大家现在知道 mvc的route强处了吧,试想一想 这种方式 来做 ajax 是不是很爽?呵呵直接地址栏访问控制器的方法就可以了,呵呵,不过现在还是最“简陋”的时候。
前面我们说过了 控制器(controller) 和方法(action)
本次要说的就是 View以及和控制器(controller)、方法(action)之间的关系;
大家都知道 MVC中的 V 就是View 的意思,就是 呈现给用户的界面,以往的asp.net项目中叫webform,以前做asp.net的时候就是在工具箱里面拖控件出来,
然后简单的排版一下就ok了,大多数用的服务器控件来完成,然而我们会发现 在生成的页面中包含大量的 hidden字段,
微软就是通过这边的hidden字段的内容来维护 每个服务端控件状态的,如果页面很多服务端控件的话整个页面就显得很臃肿。
而mvc 推出后,就不再推荐使用服务端控件(当然是可以使用的),而用传统的手写html来完成(似乎又回到过去了?呵呵)。
首先我们说一下 View 和 Controller、action之间的关系:
Controller-->Action -->View
前几篇文章说过 如何从 我们输入的 URL,找到route 再找到 controller再找到对应的action,并且说过了action 的几种返回类型。
今天的主角就是 View 类型:
这里是 默认Home 控制器下的 Index 方法
1、ViewData["Message"]="Welcome to ASP.NET MVC!" ,这里 控制器和 view之间传递参数、内容 可以通过 ViewData 来实现,ViewData存放的内容是 key/value 形式 ,
类似 Session等
2、return View(); 这里就是返回一个 view,这里他是没有带参数的,默认就是 该Action名称(Index);此时会去 Views/Home 文件夹下 找Index.aspx 这个页面,如果找到,皆大欢喜,返回Index.aspx 内容,如果找不到,不好意思 报错,提示你 找不到文件,呵呵
View(string viewname,string mastername);指定页面文件名 和 模板名
还有些构造函数的方式,大家可以在 vs里面查看一下
view 创建方式:
1、Views/对应的controller 文件夹上 右键 添加-- View
2、在Controller 里 方法里面 右键 有个 Add View 菜单
这里 View 的文件名尽量 和 Action 名称一样,这样就直接可以通过 action 名称来找到view了。
在View中我们经常使用的就是 HtmlHelper;
到底HtmlHelper给我们带来什么了呢?说白了它就是帮我们生成Html代码而已,没啥特别的,呵呵
今天简单说一下常用的东西:
1、<%= Html.Encode(ViewData["Message"])%>
Html.Encode:编码显示的内容:当你需要在页面显示一段包含html代码时,则需要用它来编码,否则就会当作普通的Html来显示给你
如:<%=Html.Encode("<ahref='#'>Test</a>")%>此时页面就会原样的输出内容,如果不用Html.Encode的话则浏览器当作一个超链接返回给你
2、<%=Html.ActionLink("关于","About")%>
实际页面生成 a 标签;参数
3、<%Html.BeginForm();%>
实际页面生成 <form>;表单的开始
Html.BeginForm(string actionName,stringcontrollerName);指定 action的名称和哪个控制器 ,页面生成内容 <formaction="XX/XX" method="post">
4、<%Html.EndForm();%>
与上面开始表单标签对应的 结束标签</form>
5、<%=Html.Hidden("name")%>
页面生成 hidden 标签
6、<%=Html.TextBox("name")%>
页面生成
7、<%=Html.DropDownList("name")%>
页面生成
还有其他的标签生成 Html.ListBox/Html.CheckBox 等,这些内容最后实际就是通过HtmlHelper类 给我们生成 标准的 html代码而已,我们完全可以手工写这些 html标签,而不是用htmlhelper,只不过它给我们封装好了,直接用就好了还是比较方便的。
下面我们简单扩展一下 HtmlHelper,让他实现我们自己的方法来实现 生成 html代码:
1、新建一个静态类、新建一个静态方法
其他不用多解释,只是说下 MyLable 第一个参数
this HtmlHelper htmlHelper : 这种写法是 3.0以后的扩展方法,就是
定义完了就好啦,我们直接在页面使用就好了,这里要注意的一点就是 需要在 页面 引入我们的命名空间
在页面的顶部加上 <%@ Import Namespace="MvcApplication1"%>
MyLable 使用方法:
<%=Heml.MyLable("ta","test")%>
这里讲的比较简单,实现起来也很简单啦,大家有兴趣可以找些其他资料来看看会有不少收获。