• MVC-03 控制器(1)


        Controller(控制器)在ASP.NET MVC中负责控制所有客户端与服务器端的交互,并且负责协调Model与View之间的数据传递,是ASP.NET MVC整体运作的核心角色。

    一、关于Controller的责任

          控制器负责处理浏览器来的所有要求,并决定响应什么属性给浏览器,但它并不负责决定属性应如何显示,仅响应特定形态的属性给ASP.NET MVC框架,最后才由ASP.NET MVC框架依据响应的形态来决定如何响应属性给浏览器。

    二、Controller的类别与方法

    1.Controller本身就是一个Class,其中有许多Method,这些method中只要是public method就会被视为是一个Action,通过action接收客户端传来的要求与决定响应的View。

    2.编写Controller的基本要求如下。

    using System.Web.Mvc;

    namespace MvcApplication1.Controllers

    {    

        public class Default1Controller : Controller    

        {        

            public ActionResult Index()  

           {

                ViewBag.Message = "修改此模板以快速启动你的ASP.NET MVC应用程序。";

                return View();

            }  

       }

    }

    (1)Controller必须为public。

    (2)Controller名称必须以Controller结尾。

    (3)必须继承自ASP.NET MVC内建的Controller类型,或继承IController的自定义类型。

    (4)所有action必须为public,任何非公开的方法如声明为private或protected的方法都不会被视为一个action。

    以下哪个不是编写Controller的基本要求(     )。

    A.Controller必须为public类型    B.Controller名称必须以Controller结尾

    C.必须继承Controller类型        D.所有动作方法必须为公开方法

    三、Controller的运行过程

          当Controller被MvcHandler选中之后,下一步就是通过ActionInvoker选定适当的Action来运行。在Controller中的每一个Action可以定义0到多个参数,ActionInvoker会依据当下的RouteValue与客户端传来的数据,准备好传入Action参数。最后正式调用Controller中被选中的那个Action方法。

          参数传入的属性都是通过一种称为模型绑定(Model Binding)机制,从RequestContext取得数据,并将数据对应或传入方法的参数中,让Action不用再像之前ASP或ASP.NET Web Forms中经常使用的Request.Form或Request.QueryString等对象来取得客户端的数据。

          Action运行完后的回传值通常是ActionResult类型或其衍射类型(Derived Classes)。ActionResult是一个抽象类,ASP.NET MVC本身实现了许多不同类型ActionResult的子类别。例如常用的ViewResult用来回传一个View,RedirectResult用来将网页转向至其他网址,ContentResult回传一个文字属性、FileResult回传一个二进制的文档,等等,这些都是继承自ActionResult的类型,也都可以拿来当成Action回传类型。总之,Action回传的类型可以是ActionResult类型或其衍生类型,以及直接使用.NET内建的基本数据类型(primitive types),如string或int等,以及void。

          MvcHandler从Controller得到ActionResult之后,就会开始运行ActionResult提供的ExecuteResult方法,并将运行结果响应到客户端,这时Controller的任务就算完成。

    四、动作方法选定器

    1.NonAction属性

          告知ActionInvoker不要选定这个Action来运行。这个属性的主要用途是用来保护Controller中的特定公开方法不要发布到Web上,或是功能尚未开发完成就要进行部署,暂时不想将此方法删除,就可以套用这个属性不要对外公开。

    [NonAction]

    public ActionResult Index()

    {

        return View();

    }

    将Action方法的public更改成private,也可以达到完全相同的目的:

    private ActionResult Index()

    {

        return View();

    }

    2.HTTP动词限定属性

        动作方法选定器还有HttpGet、HttpPost、HttpDelete、HttpPut、HttpHead、HttpOptions、HttpPatch属性。

        最常用在需要接收窗体信息的时候, 你可以创建两个同名的Action,一个套用HttpGet属性,以显示窗体HTML,另一个套用HttpPost,以接收窗体输出的值。

  • 相关阅读:
    Ubunt下的MySql设置允许远程连接
    C# 子窗体最大化后Icon与MDI窗体的菜单合拼的问题
    Android Studio安装、配置、第一个程序的那些坑
    LeetCode刷题系列——Add Two Numbers
    比特币和区块链的初探
    《Master Bitcoin》学习笔记02——比特币的交易模型
    《Master Bitcoin》学习笔记01
    jQuery 追加元素的方法如append、prepend、before、after
    获取当前月第一天和最后一天
    动态添加json数据
  • 原文地址:https://www.cnblogs.com/meetyy/p/3453206.html
Copyright © 2020-2023  润新知