控制器与动作(Controller And Action)

一、理解控制器

1.1、什么是控制器

控制器是包含必要的处理请求的.NET类,控制器的角色封装了应用程序逻辑,控制器主要是负责处理请求,实行对模型的操作,选择视图呈现给用户。

简单理解:实现了IController接口,修饰符必须是public,不能是抽象的,不能是泛型的,类名必须以Controller结尾。

控制器与动作(Controller And Action)

在MVC框架中,控制器类必须实现System.Web.Mvc命名空间下的IController接口,如上图所示,这是一个非常简单的接口,该接口仅有一个Execute方法,当请求该控制器时Execute方法被调用。通过实现IController接口,你可以创建控制器类。

1.2、控制器的作用

a、每一个针对应用程序的请求,都是通过控制器自由地选择合适的方式来处理的,只要它不偏离到视图(View)和模型(Model)所负责的区域。

b、不要把业务或数据存储的逻辑放到控制器里面,也不要创建用户接口。

1.3、创建实现IController接口的控制器

示例: 创建一个实现Icontroller接口的类,读取路由数据,并生成数据写入响应。

在Controllers文件夹下创建一个名为MyFirstController的类,实现IController接口并添加如下代码

控制器与动作(Controller And Action)

运行该应用程序并在地址栏导航到/MyFirst,便可以看到此控制器产生的输出。

创建一个类通过实现IController接口,MVC框架会将其视为一个控制器,并将请求发送给它,而且在如何处理和响应请求上没有任何限制,这是一个很好的示例,因为它向你展示了MVC框架的可扩展性,但用这种方式编写一个复杂的应用程序是非常困难的。

1.4、创建继承于Controller类的控制器

通过System.Web.Mvc.Controller类你可以派生你的控制器,System.Web.Mvc.Controller类是大多数Web开发人员需要熟悉的,用来对请求处理提供支持的一个类,Controller提供了以下三个关键特性。

(1)、动作方法(Action Method):一个控制器的行为被分解成多个方法(而并非只有唯一的Execute()方法)。每个动作方法被暴露给不同的URL,并通过从输入请求提取的参数进行调用。

(2)、动作结果(Action Result):你可以返回一个描述动作结果的对象(例如:渲染一个视图,或重定向到一个不同的URL或动作方法),然后通过该对象实现你的目的。这种指定结果和执行之间的分离简化了单元测试。

(3)、过滤器(Filter):你可以把可重用的行为封装成过滤器,然后通过在代码中添加特性的的方式,把这种行为标注到一个过多个控制器或动作方法上。

除非在头脑中有一个非常明确的需求,否则创建控制器最好的办法就是通过Controller类进行派生,这也正是你在Visual Studio中添加一个控制器,Visual Studio为你所做的事情。

在Controllers文件夹下创建一个名为MySecondController的类,继承与Controller类,然后添加一个动作方法TestAction并编写如下代码返回一个动作结果,最后再该动作方法内右键添加对应的视图。

控制器与动作(Controller And Action)

运行应用程序并导航到/MySecond/TestAction浏览结果如下:

作为Controller类的一个派生类,所要做的工作是实现动作方法、获取所需要的各种输入,以对请求进行处理,并生成一个适当的响应。后面的内容将介绍数据的接收与响应。

二、控制器对数据的接收

2.1、数据来源

a、查询字符串值 b、表单数据 c、路由数据

控制器需要经常访问来自输入请求的数据,如查询字符串、表单数据、以及由路由系统根据输入的URL解析得到的参数的值。访问这些数据有三种主要方式。

(1)、从上下文对象提取。

(2)、作为参数被传递给动作方法(Action Method)而形成的数据。

(3)、明确调用框架的模型绑定(Model Binding)功能。

注意:参数名称是忽略大小写的,如Request["Test"]与Request["test"]结果是一样的。如下图:

View部分

Controller部分

控制器与动作(Controller And Action)

2.2、通过上下文对象获取数据

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wdpszd.html