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,以接收窗体输出的值。
MVC-03 控制器(1)的更多相关文章
- ASP.NET MVC 5 - 控制器
MVC代表: 模型-视图-控制器 .MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程序包含: · Models: 表示该应用程序的数据并使用验证逻辑来强制实施业务规则的数据 ...
- .NET/ASP.NET MVC Controller 控制器(IController控制器的创建过程)
阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactory 控制器工厂接口 3.ASP.NETMVC DefaultControllerFactory 默认控制器工厂 4 ...
- MVC 在控制器中获取某个视图动态的HTML代码
ASP.NET MVC 在控制器中获取某个视图动态的HTML代码 如果我们需要动态的用AJAX从服务器端获取HTML代码,拼接字符串是一种不好的方式,所以我们将HTML代码写在cshtml文件中, ...
- 三、ASP.NET MVC Controller 控制器(二:IController控制器的创建过程)
阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactory 控制器工厂接口 3.ASP.NETMVC DefaultControllerFactory 默认控制器工厂 4 ...
- c#异步编程(三)—ASP.NET MVC 异步控制器及EF异步操作
ASP.NET MVC 异步控制器及EF异步操作 异步控制器 ASP.NET MVC2后开始了对异步请求管道的支持,异步请求管道的作用是允许web服务器处理长时间运行的请求,比如 那些花费大量时间等待 ...
- [转]ASP.NET MVC 5 - 控制器
MVC代表: 模型-视图-控制器 .MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程序包含: · Models: 表示该应用程序的数据并使用验证逻辑来强制实施业务规则的数据 ...
- ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 03. 服务注册和管道
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 03. 服务注册和管道 语雀: https://www.yuque.com/yuejiangliu/dotnet/ ...
- Spring MVC(三)--控制器接受普通请求参数
Spring MVC中控制器接受参数的类方式有以下几种: 普通参数:只要保证前端参数名称和传入控制器的参数名称一致即可,适合参数较少的情况: pojo类型:如果前端传的是一个pojo对象,只要保证参数 ...
- .NET/ASP.NET MVC Controller 控制器(深入解析控制器运行原理)
阅读目录: 1.开篇介绍 2.ASP.NETMVC Controller 控制器的入口(Controller的执行流程) 3.ASP.NETMVC Controller 控制器的入口(Controll ...
- C# MVC ( 将控制器的实体类注册到视图 )
(1)控制器 代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; usin ...
随机推荐
- C# 第三方控件 错误 LC-1
删掉项目下面的Properties\licenses.licx 文件
- Deep Learning(深度学习)学习笔记整理系列之(六)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- 在zendstudio上配置SVN
本文介绍zendstudio结合SVN的使用方法. 一.部署svn服务器 直接安装用svn软件,配置太过麻烦,用户和版本库.权限管理不太方便.推荐使用CollabNetSubversionEdge.以 ...
- Android 常用动画小结
1. 渐入动画 // Request the next activity transition (here starting a new one). startActivity(new Intent( ...
- [LeetCode]题解(python):143-Reorder List
题目来源: https://leetcode.com/problems/reorder-list/ 题意分析: 给定一个链表L:L0→L1→…→Ln-1→Ln,改变链表的排序为: L0→Ln→L1→L ...
- .net mvc笔记4_依赖注入
一.Building Loosely Coupled Components MVC模式最重要的特点就是关注点分离.我们希望应用中的组件能尽可能的独立,相互之间即使有依赖也要在我们的控制之下. 在理想情 ...
- ThinkPHP 3 的CURD介绍
本节课大纲: 一.ThinkPHP 3 的CURD介绍 (了解) 二.ThinkPHP 3 读取数据 (重点) 对数据的读取 Read $m=new Model('User'); $m=M('User ...
- BZOJ 1177 [Apio2009]Oil(递推)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1177 [题目大意] 给出一个矩阵,从中选出3个k*k且不相交的矩阵,使得其总和最大 [ ...
- VS2010/MFC对话框:一般属性页对话框的创建及显示
一般属性页对话框的创建及显示 本节将介绍一般属性页对话框的创建和显示. 实际上,一般属性页对话框的创建和显示过程和向导对话框是很类似的.鸡啄米将上一节中的向导对话框进行少量修改,使其成为一般属性页对话 ...
- IE能够打开网页 可是chrome和火狐打不开网页解决的方法
一次偶然.电脑的浏览器打不开经常使用的网页,奇怪的是IE能够打开 之外的其它浏览器都不能够,结果百度一下.找到一个帖子,亲自測试一下,果真能够解决.记录例如以下: (1)開始-执行-输入CMD-确定- ...