zoukankan      html  css  js  c++  java
  • MVC初级知识之——View与Controller的讲解

    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

     

     

  • 相关阅读:
    JAVA设计模式之 訪问者模式【Visitor Pattern】
    xcode_6_beta.dmg
    windows linux 下安装mysql 报1045 等错误
    c语言基础学习10_文件操作01
    粘贴到vi/vim的代码,怎样避免向右不断缩进,保持原来的格式?解决vi/vim在粘贴中会在行首多很多缩进和空格的问题。
    在c语言中,数组 a[i++] 和数组 a[++i] 有区别吗? && 在c语言中,数组 a[0]++; 又是什么意思?
    如何把云端服务器上的file04.c文件传输到本地pc机windows系统上去呢?
    解决在SecurecCRT登录后,发现方向键、backspace(退格键)、delete(删除键)为乱码的问题
    自己定义iOS上双击Home键图切换
    MySQL联合多表更新和删除
  • 原文地址:https://www.cnblogs.com/tuoyu123/p/8403832.html
Copyright © 2011-2022 走看看