精通ASP.NET MVC——控制器和动作

在MVC框架中,控制器必须实现System.Web.Mvc命名空间的IController接口,如下图所示:

    //// 摘要://     定义控制器所需的方法。public interface IController{//// 摘要://     执行指定的请求上下文。//// 参数://   requestContext://     请求上下文。void Execute(RequestContext requestContext);}

这是一个很简单的接口。唯一的方法Excute,在请求以控制器为目标时被调用。但是发挥着重要的作用。 在Controller文件夹中创建一个新的名为“BasicController”的类文件,如下图所示:

    public class BasicController : IController{public void Execute(RequestContext requestContext){string controller = requestContext.RouteData.Values["controller"].ToString();string action = requestContext.RouteData.Values["action"].ToString();requestContext.HttpContext.Response.Write(string.Format("Controller:{0},Action:{1}", controller, action));}}

IController接口的Execute方法被传递给System.Web.Routing.RequestContext对象,它提供关于请求和匹配路由的信息,如下图所示: 

RequestContext类定义的属性
名称描述
HttpContext返回一个描述当前请求的 HttpContextBase 对象
RouteData返回一个描述匹配请求的路由的RouteData对象

HttpContextBase对象对一组描述当前请求的对象提供访问。RouteData对象描述了路由,下图描述了RouteData属性:

RouteData类定义的属性
名称描述
Route返回匹配路由的RouteBase实现
RouteHandler返回处理路由的IRouteHandler
Values返回按名称索引的片段值的集合

运行效果如下图所示: 

           


接受请求数据: 

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

1、通过一组上下文对象进行提取。

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

3、明确地调用框架的模型绑定特性

 

当控制器通过Controller基类派生而来的时候,使得到了一组便利属性,可以用来访问与请求相关的信息。这些便利属性包括Request,Reponse,RouteData、HttpContext,以及Server。每一个属性都包括了请求不同方面的信息,是因为每一个都是从请求的ControllerContext实例接受了不同类型的数据。这些属性统称为“便利属性”如下图所示:

 

常用的上下文对象
属性类型描述
Request.QueryStringNameValueCollection随该请求发送的GET变量
Request.FormNameValueCollention随该请求发送的POST变量
Request.CookiesHttpCookieCollection由浏览器随该请求发送的Cookies
Request.HttpMethodsting用于该请求的HTTP方法(动词,如GET或者POST)
Request.HeadersNameValueCollection随该请求发送的整个HTTP报头
Request.UrlUrl所请求的URL
Request.UserHostAddressstring形成该请求的用户IP地址
Request.RouteRouteBase为该请求所选择的RouteTable.Routes条目
RouteData.ValuesRouteValueDictionary当前路由的参数(从URL或默认值提取)
HttpContext.ApplicationHttpApplicationStateBase应用程序状态库
HttpContext.CacheCache应用程序缓存库
HttpContext.ItemsIDictionary当前请求的状态库
HttpContext.SessionHttpSessionStateBase访问者会话状态库
UserIPrincipal已登录用户的认证信息
TempDataTempDataDictionary为当前用户存储的临时数据项

 


动作结果 

MVC框架通过使用动作结果(Action Result)把指明意图执行意图分离开来。一般都是返回一个派生与ActionResult类的对象,它描述控制器相应应该要完成的功能。例如,渲染一个视图,重定向到另一个URL或 动作方法等,在动作方法被执行后,创建MVC框架处理的ActionResult对象以产生结果。MVC框架有许多内建的动作结果类型,如下图所示:

内建的ActionResult
类型描述辅助器方法
ViewResult返回指定的或默认的视图模板View
PartialViewResult返回指定的或默认的分部视图模板PartialView
RedireToRouteResult将HTTP 301或者302重定向发给一个动作方法或特定的路由条目,根据路由配置生成一个URL

RedirectToAction

RedirectToActionPermanent

RedirectToRoute

RedirectToRoutePermanent

RedirectResult将HTTP301或302重定向发送给一个特定的URLRedirect RedirectPermanent
ContentResult返回原始的文本数据给浏览器,随意设置文本类型头部Content
FileResult将二进制(例如,磁盘文件或内存字节数组)直接传送给浏览器File
JsonResult将一个.NET对象序列化成JSON格式,发送给响应Json
JavaScriptResult发送一个由浏览器执行的JavaScript源代码偏度JavaScript
HttpUnauthorizedResult将响应的HTTP状态码设置为401(意味“未授权”),这会引发当前的认证机制(表单认证或Windows认证)要求访问者进行登录None
HttpNotFoundResult返回一个HTTP的“404——未找到”错误HttpNotFount
HttpStatusCodeResult返回一个指定的HTTP码None
EmptyResult什么也不做None

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精通ASP.NET MVC ——视图

文章非常长,仅仅用于记录自己学习。 创建自定义视图引擎 创建自定义视图引擎的价值是,演示请求处理管道如何工作,并完善关于MVC架构如何操作的知识,视图引擎实现IViewEngine接口,如下图所示: public inte…

使用列表选择框控件

本例使用列表选择框控件,并向其中添加删除列表项,程序运行如下图所示。 程序代码如下。 using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; namespace eg38_checklistBoxApp {public partial class Form1 : Form…

精通ASP.NET MVC ——辅助器方法

辅助器方法(Helper Method),其作用是对代码块和标记进行打包,以便能够在整个MVC框架应用程序中重用。 首先新建一个项目,添加一个Home控制器,如下图所示: public class HomeController : Controller{// GET: Homepubli…

精通ASP.NET MVC ——模型绑定

模型绑定(Model Binding)是指,用浏览器以Http请求方式发送的数据来创建.Net对象的过程。 准备示例项目 新建一个空的MVC项目,名叫MvcModels,接下去会以此项目来演示各种功能。 在Models文件夹中创建一个Person.cs类…

精通ASP.NET MVC ——模型验证

文章内容较长,用于记录自己学习。模型验证(Model Vaildation)是确保应用程序所接受的数据适合于绑定到模型,并且在不合适时给用户提供有用的信息,以帮助他们修正问题的过程。 准备示例项目 新建一个空的MVC项目&…

[wbia 2.2] 对检索结果进行评估

评估对检索系统的性能: 由于我们这里的检索结果,是主要根据PageRank的排名,以及Lucene对文本的分词和相关性计算的最后得分,进行权值调整后得到的排名结果。 这里对我们检索系统的进行性能评估,这里主要评估的是检索结…

错误175:具有固定名称MySql.Data.MySqlClient的ADO.NET提供程序未在计算机或者应用程序配置文件中注册或者无法加载

背景: EF连接MySQL时报错,截图如下图所示: 网上翻阅了很多资料,感觉有一篇文章说的比较靠谱:点击阅读。解决问题的大致过程如下: 在尝试使用MySQL,ADO.NET(数据库优先)和…

精通ASP.NET MVC ——URL和Ajax辅助器方法

Ajax(或者,如果你愿意,也可以称为AJAX)是 Asynchronous JavaScripts and XML(异步JavaScripts与XML)。其XML部分并不如它往常那样意义重大,但是异步部分却使AJax十分有用。这是后台请求服务器数据,而不必重载Web页面的一种模型。M…

精通ASP.NET MVC ——控制器可扩展性

MVC中引导动作方法执行过程的请求流程管道中,有两个重要的部件:控制器工厂(Controller Factory) 和 动作调用器(Action Invoker)。控制器工厂负责创建对请求进行服务的控制器实例,动作调用器负责查找并调用控制器类中的…

永中向香港博览会主办方演示云办公(转载)

4月16号“香港国际资讯博览会”主办方香港贸发局对永中云办公产品非常感兴趣,由永中员工演示,并拍摄了演示视频。转载于:https://blog.51cto.com/premium/837675

Backbone.js学习笔记

为什么80%的码农都做不了架构师?>>> http://documentcloud.github.com/backbone var todoItem new TodoItem(); todoItem.url /todo; todoItem.fetch(); todoItem.get(description)var TodoItem Backbone.Model.extend({urlRoot: /todos }); var tod…

ASP.NET MVC中使用Autofac实现简单依赖注入

本文参考资料: 1、https://www.cnblogs.com/RayWang/p/11128554.html。 2、https://www.cnblogs.com/eedc/p/6127181.html 3、https://www.cnblogs.com/ancupofcoffee/p/5007649.html#top 前言 关于IoC和DI(依赖注入)的概念网上一搜一大把。简单来说,Io…

初探EntityFramework——来自数据库的EF设计器

本文通过简单的示例,先初步了解下EF四种设计模式之一:来自数据库的EF设计器。 来自数据库的EF设计器,顾名思义,需要有新建的数据库和表结构,才能生成EF设计器, 在本地新建数据库KTStore,并且新建…

初探EntityFramework——空EF设计器模型

如果没有任何现存数据库架构,可以使用空的EF设计器模型。本文将通过简单示例,了解如何使用空EF设计器模型。 新建空的控制器应用程序EFDesignerDemo,如下图所示: 在项目中右键,选择“添加”,然后是“新建项…

初探EntityFramework——来自数据库的Code First

Entity Framkwork从第二版(EF4)开始,支持新的CodeFirst模式(程序代码优先),以自定义类定义数据模型。简化了EF的开发过程。本文章使用简单的示例来说明如何使用来自数据库的CodeFirst模式。 新建一个空的控…

初探EntityFramework——空Code First模型

如果不是从现有的系统升级,想要创建全新的项目可以从“空Code First模型开始”。“空CodeFirst模型”要先创建类,Visual Studio会从项目第一次执行的时候根据连接自动创建需要的数据库结构。本文将简单示例说明如何使用“空CodeFirst模型”。 新建控制台…

初探EntityFramework——实体类结构映射

实体类与数据表的映射有一套专用的规则。Code First 采用的惯例优于预先设置的设计,在没有任何设置的情况下,自动检测模型结构并推导出默认设置以简化类的设计,因此不需要特别设置类的属性即可完成模型设计。 例如,当DbContext的模…

深入了解EntityFramework——数据注解属性

当惯例规则不符合设计需求时,我们可以使用数据注解配置打造更合适的数据库模型。本文根据示例项目对常用的数据注解属性做一个简要的举例说明。 EFCodeFirst使用的约定大于配置的的编程模式, 这种模式利用默认约定根据我们的领域模型建立概念模型。然我们…

Android上实现柱状图表

Android上实现柱状图算法实现 第一步: 获取Android设备的屏幕大小 第二步: 在View对象中使用Canvas绘制蓝色边框与白色背景XY轴两条线,代码如下 第三步: 绘制柱状图标题 第四步: 根据数据集计算出每个系列数据所占X轴的…

深入了解EntityFramework——Fluent API

Fluent API 除了惯例原则与属性数据注解外,FluentAPI是另一种支持实体类配置设置的方式。与属性数据注解相比,它提供了更广泛的功能与设置弹性。实体类若同时设置了数据注解,则采用的优先权是“Fluent API” > "数据注解" &g…