.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文件中,我们可以看到

 

 

 

 

.net <wbr>mvc2 <wbr>学习笔记 代码
routes.MapRoute(
                
" Default "                                               //  Route name
                 " {controller}/{action}/{id} "                            //  URL with parameters
                 new  controller  =   " Home " action  =   " Index " id  =   ""    //  Parameter defaults
            );

 

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格式 如:

 

 

 

 

.net <wbr>mvc2 <wbr>学习笔记 代码
routes.MapRoute(
                
" myRoute "                                               //  Route name
                 " myRoute/{dt} "                            //myRoute就是路由的名字  
                 new  controller  =   " MyController " action  =   " MyAction "    //  Parameter defaults
            );

 

 

 

这里我为新添加的一个 route 起了个名字 叫 "myRoute",

我规定的 url 格式 是 "myRoute/{dt}",刚才上面提到被大括号括起来的值是参数,而不括起来的则可以看成字符串,后面 dt 是一个参数,这里我没有 在这个规则上写上

{controller} 和 {action}2个参数,这是系统就会找到下面默认提供的参数

"new controller = "MyController"action = "MyAction" 默认控制器 是 "MyController"(注意:控制器的名称叫MyController,实际上类名叫MyControllerController,这点需要注意,否则报404错误。),默认方法是"MyAction",好,这样我们就添加上了我们自定义规则的路由;

 

下面就是需要添加 MyController 控制器 和 MyAction 方法;

代码如下

 

 

.net <wbr>mvc2 <wbr>学习笔记 代码
public   class  MyControllerController Controller
    {
        
//
        
//  GET: /My/

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

        
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

就可以看到页面输出:

 

 

 

 

MyController's MyAction isWorkded!2010年01月10日

 

 

 

 

大家是不是感觉route 很爽了,感觉用起来随心所欲嘛,嘿嘿~

 

注意:这里新建的路由要写在Default那个默认路由的上方,还要把项目重新生成一下才能有效果。

 

 

上次我们说到了 route 路由的功能,整个mvc运行过程:

Route(路由) -->Controller(控制器)-->action(方法)

 

这次我们要说的就是 controller 控制器 和action:

 

控制器的作用就是:当一个 Request 来的时候,首先Route 解析 找到了 对应控制器,控制器再根据  action 决定给我们返回什么样的内容。如:

 

 

.net <wbr>mvc2 <wbr>学习笔记 代码
public   class  MyControllerController Controller
    {
        
public  ActionResult MyAction(DateTime dt)
        {
            ContentResult cr 
=   new  ContentResult();
            cr.Content 
=   " MyController's MyAction is Workded! "   +  dt.ToString( " yyyy年MM月dd日 " );
            
return  cr;
        }

        
public   void  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 类型:

 

 

  public  ActionResult Index()
        {
            ViewData[
" Message " =   " Welcome to ASP.NET MVC! " ;

            
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("<ahref='#'>Test</a>")%>此时页面就会原样的输出内容,如果不用Html.Encode的话则浏览器当作一个超链接返回给你

 

2、<%=Html.ActionLink("关于","About")%>

  实际页面生成 a 标签;参数  About 是action名称

 

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")%>

  页面生成 <input type="text"name="name" /> 标签

 

7、<%=Html.DropDownList("name")%>

  页面生成 下拉框 select

 

还有其他的标签生成 Html.ListBox/Html.CheckBox 等,这些内容最后实际就是通过HtmlHelper类 给我们生成 标准的 html代码而已,我们完全可以手工写这些 html标签,而不是用htmlhelper,只不过它给我们封装好了,直接用就好了还是比较方便的。

 

 

下面我们简单扩展一下 HtmlHelper,让他实现我们自己的方法来实现 生成 html代码:

1、新建一个静态类、新建一个静态方法

 

  public   static   class  MyHelper
    {
        
public   static   string  MyLable( this  HtmlHelper htmlHelper,  string  target,  string  text)
        {
            
return   string .Format( " <label for='{0}'>{1}</lable> " ,target,text);
        }
    }

 

其他不用多解释,只是说下 MyLable 第一个参数

this HtmlHelper htmlHelper : 这种写法是 3.0以后的扩展方法,就是  本方法是对 HtmlHelper的扩展,参数 stringtarget,string text 2个参数;

 

定义完了就好啦,我们直接在页面使用就好了,这里要注意的一点就是 需要在 页面 引入我们的命名空间

在页面的顶部加上 <%@ Import Namespace="MvcApplication1"%>

MyLable 使用方法:

<%=Heml.MyLable("ta","test")%>

 

这里讲的比较简单,实现起来也很简单啦,大家有兴趣可以找些其他资料来看看会有不少收获。

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值