精通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…

用css3制作旋转加载动画的几种方法

以WebKit为核心的浏览器,例如Safari和Chrome,对html5有着很好的支持,在移动平台中这两个浏览器对应的就是IOS和Android。最近在开发一个移动平台的web app,那么就有机会利用css3去实现一些很酷的效果,这些效果原来更多…

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

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

C# 数据库连接池 线程安全 单例模式 的实现

本文介绍3种线程安全模式 1,lock 2,Mutex 3,MethodImpl 以前写的一个MYSQL数据库连接池ConnectionPool.CS using System; using System.Collections.Generic; using System.Linq; using System.Text;using System.IO; using System.Threading…

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

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

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

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

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

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

防止刷票方法大全

1. IP限制 这是使用的最多,也是最广泛,不可少的刷票限制。而且由于专题都没有用户模块,使得这个方法,几乎成了唯一可行的手段。该方式,通过获取访问游客的IP地址,来限制其在一段时间内所能使用的票数。当然…

精通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,并且新建…

【034】◀▶ 学习网站 问题解决

--------------------------------------------------------------------------------------------------------- ●● 目录: A1 ………… ArcGIS Engine 学习网站A2 ………… 其他 ArcGIS Engine 开发网站A3 ………… 程序开发技术博客A4 ………… 问题解决链接 —…

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

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

Qt4小技巧——QTextEdit自动滚屏

CuteQt Blog Blog Archive Qt4小技巧——QTextEdit自动滚屏Qt4小技巧——QTextEdit自动滚屏本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。…