MVC初级知识之——View与Controller的讲解

2018-02-02 19:52:36来源:cnblogs.com作者:爱丄层楼人点击

分享

Controller是MVC中比较重要的一部分。几乎所有的业务逻辑都是在这里进行处理的,并且从Model中取出数据。在ASP.NET MVC Preview5中,将原来的Controller类一分为二,分为了Controller类和ControllerBase类。Controller类继承自ControllerBase类,而ControllerBase实现是了IController接口。

ControllerBase实现了IController接口的Execute方法,在Route匹配到Controller之后,就会调用Execute方法来进入Controller的处理。这里还定义了一个抽象的方法ExecuteCore方法,该方法会在Execute方法的最后被调用。Controller类还定义很多有用的方法,我们新建的Controller都必须继承自这个Controller类。例如我们新建一个AdminController:

下面谈一下在Controller中比较重要的Action方法。在ASPNET MVC中URL都是映射到Controller中的某个Action中,然后由匹配的Action来处理我们的业务逻辑并返回view的。Controller中的public的方法都被当作是Action方法。Action方法通常返回一个ActionResult的结果。默认情况下,Action方法的方法名就是这个Action的Action名(Action名指的是Route中匹配Action方法的URL的那部分。例如url:Home/Index,其中Index就是Action名)。

ASP.NET MVC为我们提供了几种ActionResult的实现

最常用

ActionResult Action方法返回ActionResult类型的结果。
FileResult写入文件内容,具体的写入方式在派生类中
PartialViewResult调用父类ViewResultBase的ExecuteResult方法。
重写了父类的FindView方法。
JsonResult.返回SON结果。由Json方法返回。

不常用

ViewResult.呈现视图页给客户端。由View方法返回。
RedirectToRouteResult.重定向到另外一个Route。由RedirectToAction 和RedirectToRoute方法返回。
RedirectResult.重定向到另外一个URL。由Redirect方法返回。
ContentResult.返回普通的内容。例如一段字符串。由Content方法返回。
EmptyResult.如果Action必须返回空值,可以返回这个结果。Controller中没有实现的方法,可以return new EmptyResult();

Action方法的参数

例如我们要在AdminController中定义一个编辑日志的Action方法:

对于URL:Admin/EditPost/2,上面的参数会自动被赋值为2。ASP.NET MVC在匹配Route的时候会根据Route的设置自动为Action方法的参数赋值。所以前面的id参数会被自动赋值为2的前提是,在Route配置的时候,必须指定了id参数,例如:

  • Viewstart.cshtml是一个在呈现View文件的时候的启动文件,会在所有View(.cshtml)被执行之前执行。
  • 注意,是在View被呈现的时候才会调用Viewstart.cshtml,如果一个View是按照PartialView(分布页不会调用母版页)的方式输出的,则不会触发_Viewstart.cshtml中的代码。
  • 如果在View的某个目录下(例如Home目录)也有一个同名的ViewStart.cshtm文件,那么这个_ViewStart也会被调用,但是最先调用的还是最外面的_Viewstart,然后再是Home目录下的ViewStart。

一个完整的View是通过与Layout和其他局部View组合而来,如何开发一个Layout?

@RenderBody0
当创建基于此布局页面的视图时,视图的内容会和布局页面合并,而新创建视图的内容
会通过布局页面的@RenderBody()方法呈现在标签之间。

@Html.Partial("_LoginPartial")
可以调用局部的分布页呈现在当前区域。

@RenderSection("footer",false)
布局页面还有节(Section)的概念,也就是说,如果某个视图模板中定义了一个节,那么可以把它单独呈现出来。
当然还要在视图中定义节,否则会出现异常:

@section footer{
<div>Hello word</div>
}

 实例产品基于asp.net mvc 5.0框架,源码下载地址:http://www.jinhusns.com/Products/Download

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台