<p><span style="color: #ff0000"><strong>一、理解控制器</strong></span></p>
<p><strong>1.1、什么是控制器</strong></p>
<p>控制器是包含必要的处理请求的.NET类,控制器的角色封装了应用程序逻辑,控制器主要是负责处理请求,实行对模型的操作,选择视图呈现给用户。</p>
<p>简单理解:实现了IController接口,修饰符必须是public,不能是抽象的,不能是泛型的,类名必须以Controller结尾。</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-hangzhou.aliyuncs.com/jb/2426819-1c15acaf803724ffb11a9c8160ce2efe.png"></p>
<p>在MVC框架中,控制器类必须实现System.Web.Mvc命名空间下的IController接口,如上图所示,这是一个非常简单的接口,该接口仅有一个Execute方法,当请求该控制器时Execute方法被调用。通过实现IController接口,你可以创建控制器类。</p>
<p><strong>1.2、控制器的作用</strong></p>
<p>a、每一个针对应用程序的请求,都是通过控制器自由地选择合适的方式来处理的,只要它不偏离到视图(View)和模型(Model)所负责的区域。</p>
<p>b、不要把业务或数据存储的逻辑放到控制器里面,也不要创建用户接口。</p>
<p><strong>1.3、创建实现IController接口的控制器</strong></p>
<p>示例: 创建一个实现Icontroller接口的类,读取路由数据,并生成数据写入响应。</p>
<p>在Controllers文件夹下创建一个名为MyFirstController的类,实现IController接口并添加如下代码</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-hangzhou.aliyuncs.com/jb/2426819-776f1b629fb8904e6b0dd702c9ee81e8.png"></p>
<p>运行该应用程序并在地址栏导航到/MyFirst,便可以看到此控制器产生的输出。</p>
<p>创建一个类通过实现IController接口,MVC框架会将其视为一个控制器,并将请求发送给它,而且在如何处理和响应请求上没有任何限制,这是一个很好的示例,因为它向你展示了MVC框架的可扩展性,但用这种方式编写一个复杂的应用程序是非常困难的。</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-hangzhou.aliyuncs.com/jb/2426819-4aefa309a49b470df6816e52b6c7028d.png"></p>
<p><strong>1.4、创建继承于Controller类的控制器</strong></p>
<p>通过System.Web.Mvc.Controller类你可以派生你的控制器,System.Web.Mvc.Controller类是大多数Web开发人员需要熟悉的,用来对请求处理提供支持的一个类,Controller提供了以下三个关键特性。</p>
<p>(1)、动作方法(Action Method):一个控制器的行为被分解成多个方法(而并非只有唯一的Execute()方法)。每个动作方法被暴露给不同的URL,并通过从输入请求提取的参数进行调用。</p>
<p>(2)、动作结果(Action Result):你可以返回一个描述动作结果的对象(例如:渲染一个视图,或重定向到一个不同的URL或动作方法),然后通过该对象实现你的目的。这种指定结果和执行之间的分离简化了单元测试。</p>
<p>(3)、过滤器(Filter):你可以把可重用的行为封装成过滤器,然后通过在代码中添加特性的的方式,把这种行为标注到一个过多个控制器或动作方法上。</p>
<p> 除非在头脑中有一个非常明确的需求,否则创建控制器最好的办法就是通过Controller类进行派生,这也正是你在Visual Studio中添加一个控制器,Visual Studio为你所做的事情。</p>
<p>在Controllers文件夹下创建一个名为MySecondController的类,继承与Controller类,然后添加一个动作方法TestAction并编写如下代码返回一个动作结果,最后再该动作方法内右键添加对应的视图。</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-hangzhou.aliyuncs.com/jb/2426819-57001ec5fbefceb734fb8ee1ece72947.png"></p>
<p>运行应用程序并导航到/MySecond/TestAction浏览结果如下:</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-hangzhou.aliyuncs.com/jb/2426819-8591e1c8414f908e5db5346e98d36e29.png"></p>
<p>作为Controller类的一个派生类,所要做的工作是实现动作方法、获取所需要的各种输入,以对请求进行处理,并生成一个适当的响应。后面的内容将介绍数据的接收与响应。</p>
<p><span style="color: #ff0000"><strong>二、控制器对数据的接收</strong></span></p>
<p><strong>2.1、数据来源</strong></p>
<p>a、查询字符串值 b、表单数据 c、路由数据</p>
<p>控制器需要经常访问来自输入请求的数据,如查询字符串、表单数据、以及由路由系统根据输入的URL解析得到的参数的值。访问这些数据有三种主要方式。</p>
<p>(1)、从上下文对象提取。</p>
<p>(2)、作为参数被传递给动作方法(Action Method)而形成的数据。</p>
<p>(3)、明确调用框架的模型绑定(Model Binding)功能。</p>
<p>注意:参数名称是忽略大小写的,如Request["Test"]与Request["test"]结果是一样的。如下图:</p>
<p>View部分</p>
<p><img alt="" src="https://beijingoptbbs.oss-cn-hangzhou.aliyuncs.com/jb/2426819-c3462cff9812a79b73f2816c46f782c8.png"></p>
<p>Controller部分< |
|