.net mvc2 学习笔记
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 { controller ="Home", action ="Index", id ="" }:是默认的参数,当没有指定{controller}时默认 "Home"这个控制器,当没有指定 {action}时 默认"Index" 这个执行方法,类似的 id 就是 如果没有指定{id} 则 使用这里的值
上面就是对默认的一个映射参数的解释也就是默认的一个解析URL格式的配置,呵呵,微软这个功能实在太妙了,这样就把业务逻辑和页面分开了,我们可以通过修改这里的配置,来解析URL执行我们想要执行的业务代码、展示页面。
下面我们可以自己定义一个规则来解析我们所需要的url格式 如:
代码
这里我为新添加的一个 route 起了个名字 叫 "myRoute",
我规定的 url 格式 是 "myRoute/{dt}",刚才上面提到被大括号括起来的值是参数,而不括起来的则可以看成字符串,后面 dt 是一个参数,这里我没有 在这个规则上写上
{controller} 和 {action}2个参数,这是系统就会找到下面默认提供的参数
"new { controller ="MyController", action ="MyAction" } " 默认控制器 是 "MyController"(注意:控制器的名称叫MyController,实际上类名叫MyControllerController,这点需要注意,否则报404错误。),默认方法是 "MyAction",好,这样我们就添加上了我们自定义规则的路由;
下面就是需要添加 MyController 控制器 和 MyAction 方法;
代码如下
代码
public ActionResult MyAction(DateTime dt) { ContentResult cr =new ContentResult(); cr.Content ="MyController's MyAction is Workded!"+ dt.ToString("yyyy年MM月dd日"); return cr; } }
这里可以看到 MyAction 方法里面接收一个 DateTime 类型的 dt,就是我们规则里面的 {dt}这个参数,
启动我们程序后,在地址栏里输入 http://localhost:2235/myRoute/2010-1-10
就可以看到页面输出:
大家是不是感觉route 很爽了,感觉用起来随心所欲嘛,嘿嘿~
注意:这里新建的路由要写在Default那个默认路由的上方,还要把项目重新生成一下才能有效果。
上次我们说到了 route 路由的功能,整个mvc运行过程:
Route(路由) --> Controller(控制器)-->action(方法)
这次我们要说的就是 controller 控制器 和 action:
控制器的作用就是:当一个 Request 来的时候,首先Route 解析 找到了 对应控制器,控制器再根据 action 决定给我们返回什么样的内容。如:
代码
publicvoid MyTest() { Response.Write("hhhh"); } }
首先: 控制器类 必须继承 Controller,这个我们新建controller 的时候都已经给我们继承好了,这里我们起了一个名字叫“MyController”;
这里控制器命名规则 最后需要是Controller,如:TestController……
这个控制器里面我们写了2个方法,首先第一个 MyAction,接收的参数是 DateTime型的 dt,这里我们第一个笔记已经说到了url 规则里面的 {dt}参数,这里我们这样接收到我们url里面所传递的参数;返回类型是 ActionResult,返回类型有好几种如:
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解析到执行
我们在地址栏输入 http://localhost:2235/MyController/MyTest 时一样 可以解析到我们 MyTest()方法,这里面我们处理一些我们的逻辑就可以了,
大家现在知道 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 类型:
return 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 有8个重载的构造函数,常用的除了 无构造函数外,还有 可以带一个 viewname 的字符串:
return View("About"); 此时 就可以根据 About 来寻找对应的 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("<a href='#'>Test</a>")%>此时页面就会原样的输出内容,如果不用Html.Encode的话则浏览器当作一个超链接返回给你
2、<%=Html.ActionLink("关于","About") %>
实际页面生成 a 标签;参数 About 是 action名称
3、<%Html.BeginForm(); %>
实际页面生成 <form >;表单的开始
Html.BeginForm(string actionName,string controllerName);指定 action的名称和哪个控制器 ,页面生成内容 <form action="XX/XX" method="post">
4、<%Html.EndForm() ;%>
与上面开始表单标签对应的 结束标签 </form>
5、<%=Html.Hidden("name") %>
页面生成 hidden 标签
6、<%=Html.TextBox("name") %>
页面生成 <input type="text" name="name" /> 标签
7、<%=Html.DropDownList("name") %>
页面生成 下拉框 select
还有其他的标签生成 Html.ListBox/Html.CheckBox 等,这些内容最后实际就是通过 HtmlHelper类 给我们生成 标准的 html代码而已,我们完全可以手工写这些 html标签,而不是用 htmlhelper,只不过它给我们封装好了,直接用就好了还是比较方便的。
下面我们简单扩展一下 HtmlHelper,让他实现我们自己的方法来实现 生成 html代码:
1、新建一个静态类、新建一个静态方法
其他不用多解释,只是说下 MyLable 第一个参数
this HtmlHelper htmlHelper : 这种写法是 3.0以后的扩展方法,就是 本方法是对 HtmlHelper的扩展,参数 string target,string text 2个参数;
定义完了就好啦,我们直接在页面使用就好了,这里要注意的一点就是 需要在 页面 引入我们的命名空间
在页面的顶部加上 <%@ Import Namespace="MvcApplication1" %>
MyLable 使用方法:
<%=Heml.MyLable("ta","test")%>
这里讲的比较简单,实现起来也很简单啦,大家有兴趣可以找些其他资料来看看会有不少收获。

浙公网安备 33010602011771号