• 【ASP.NET MVC 学习笔记】- 10 Controller和Action(1)


    本文参考:http://www.cnblogs.com/willick/p/3331521.html

    1、继承IController接口,示例代码将当前请求的Controller和Action打印到浏览器:

    public class BasicController : IController 
    {
            public void Execute(RequestContext requestContext) 
            {
                string controller = (string)requestContext.RouteData.Values["controller"];
                string action = (string)requestContext.RouteData.Values["action"];
                
                requestContext.HttpContext.Response.Write(
                    string.Format("Controller: {0}, Action: {1}", controller, action));
            }
    }

         稍微复杂一点的系统,继承IController是需要做许多工作的,不建议直接继承IController接口。

    2、MVC 框架的 System.Web.Mvc.Controller 类,提供了足够实用的特性来方便我们对请求的处理和返回结果。它提供了一下几个关键的特性:

    • Action方法:一个 Controller,它的行为被分为多个方法,通常一个方法对应着一个请求,并且可以通过方法参数来取得请求传递过来的数据。
    • ActionResult:可以返回一个描述了 Action 方法执行结果的对象,这样的好处是想返回什么结果就指定对应的返回对象就行,不用关心怎么去执行并生成结果。
    • Filters:通过C#特性,对某一种行为的处理(比如授权和验证)进行封装,方便了在多个 Controller 和 Action 方法之间进行重用。

    3、从Controller中获取数据有以下三种主要来源:

    • 一系列的上下文对象。

         最常见的上下文对象如下图所示:

         

    • 传递给 Action 方法的参数。

    Controller 类通过 MVC 框架的 value providermodel binder 组件来为 Action 方法获取参数的值。value provider 提供了一系列Controller中可以访问到的值,在内部它通过从 Request.Form、Request.QueryString、Request.Files 和 RouteData.Values 等上下文对象中提取数据(键值集合),然后把数据传递给 model binder,model binder试图将这些数据与Action方法的参数进行匹配。默认的 model binder 可以创建和赋值给任何.NET类型对象参数(即 Action 方法的参数),包括集合和自定义的类型。

    • 显式的调用框架的模型绑定(Model Binding)特性。

     4、ActionResult是描述 Action 方法执行结果的对象,它的好处是想返回什么结果就指定对应的返回对象就行,不用关心如何使用Response对象来组织和生成结果。ActionResult 是一个命令模式的例子,这种模式通过存储和传递对象来描述操作。当 MVC 框架从 Action 方法中接收到一个 ActionResult 对象,它调用这个对象的 ExecuteResult 方法,其内部是通过 Response 对象来返回我们想要的输出结果。 MVC框架包含了许多 ActionResult 类型,这些类型都继承自 ActionResult 类,大部分在 Controller 类中都有简便的方法:

        

         除了该表列出来的,还有ContentResultFileResultJsonResult 和 JavaScriptResult

    5、从Action传递数据到View中的几种方式:

    • View Model对象:
    //Action中
    public ViewResult Index() 
    { 
        DateTime date = DateTime.Now; 
        return View(date); 
    } 
    
    //View中获取
    @model DateTime 
    
    @{ 
        ViewBag.Title = "Index"; 
    }
    
    <h2>Index</h2> 
    The day is: @Model.DayOfWeek
    • ViewBag,是一个动态(dynamic)的弱类型,在程序运行的时候解析,是 MVC3 中新增的特性,只在当前View有效
    • ViewData,是一个字典集合,也是只在当前View有效,性能比 ViewBag 高,但是使用的时候需要类型转换。
    • TempData,也是字典集合,一般用于两个请求之间临时缓存内容或页面间传递消息,保存在 Session 中,使用完以后则从 Session 中被清除。

       一般在当前 View 中使用 ViewBag 或 ViewData,在两个请求之间传递临时数据用 TempData。由于 TempData 被使用后即被释放,所以如果要二次使用 TempData 中的数据就需要将其存到其他变量中。

  • 相关阅读:
    C# 2008核心编程(20130713)
    java 异常处理机制
    指定节点滚动到屏幕中间的js
    mysql 数据误删恢复
    《How Tomcat works》
    HashMap中 工具方法tableSizeFor的作用
    mysql 是如何保证在高并发的情况下autoincrement关键字修饰的列不会出现重复
    为什么java io流必须得关闭
    下载文件出现内存溢出问题
    当使用junit4 对spring框架中controller/service/mapper各层进行测试时,需要添加的配置
  • 原文地址:https://www.cnblogs.com/wangwust/p/6386849.html
Copyright © 2020-2023  润新知