zoukankan      html  css  js  c++  java
  • 【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 中的数据就需要将其存到其他变量中。

  • 相关阅读:
    ZOJ 2588 Burning Bridges
    POJ 1966 ZOJ 2182 Cable TV Network
    HDU 5348 MZL's endless loop
    HDU 5352 MZL's City
    Tarjan算法求解无向连通图的割点、割边、点双连通分量和边双连通分量的模板
    ZOJ 1119 SPF
    HDU 3452 Bonsai
    HDU 1520 Anniversary party
    POJ 2239 Selecting Courses
    POJ 1144 Network
  • 原文地址:https://www.cnblogs.com/wangwust/p/6386849.html
Copyright © 2011-2022 走看看