《asp.net mvc3 高级编程》第二章 控制器
2013-09-29 23:31
225 查看
一、控制器的角色
MVC模式中的控制器(Controller)主要负责响应用户的输入,并且在响应时通常会修改模型(Model)。通过这种方式,MVC模式中的控制器主要关注的是应用程序流,输入数据的处理,以及对相关视图(View)输出数据的提供。
MVC是基于路由机制的,URL告知路由机制去实例化哪个控制器,调用哪个操作方法,并为该方法提供需要的参数。然后由控制器的方法决定使用哪个视图,并随后对该视图进行渲染。
URL与控制器(controller)类中的某个方法有关。理解MVC模式在Web场景中工作原理的一个好方法就是记住:MVC提供的是方法调用的结果,而不是动态生成的页面。
二、创建第一个非常简单的控制器
1、创建新控制器
首先打开上一张建立的MVC项目,然后在Controller文件夹上右击选择添加--控制器菜单项,如图2-1所示。
View Code
(3)启动运行项目,然后再浏览器地址栏下输入一下URL:
/Demo
/Demo/Browse
/Demo/Details
访问这些URL会调用控制器中所对应的操作方法,比如访问/Demo/Details 调用Demo 中的Details方法,然后返回响应字符串。如图2-3所示。
图 2-3
3、经验总结
(1)"http://localhost:35396/Demo/Details"中的Demo对应控制器(DemoController)中的前缀,Details对应DemoController类中的Details方法。URL请求/Demo/Details时,Details方法就可以得到执行,这就是操作中的路由。后面还会对路由稍作介绍,第9章将会详细讲解。
(2)已经利用一个控制器在浏览器里显示了文本而没有用到模型或视图。尽管在ASP.NET MVC中模型和视图非常有用,但控制器才是真正的核心。每一个请求都必须通过控制器处理,然而其中有些是不需要利用模型和视图。
三、有参数的控制器
(1)将Browse操作方法修改为检索一个从Url传过来的查询字符串值。当方法被调用时,ASP.NET MVC会自动将查询字符串或从表单提交的参数传递给Browse操作方法。如下面代码所示:
利用方法"HttpUtility.HtmlEncode"来预处理用户输入。这能阻止用户向视图中用连接注入JavaScript代码或者HTML标记。比如/Demo/Browse?Genre=<script>window.location="http://hacker.example.com"</script>.
(2)浏览到 /Demo/Browse?str=hello ,结果如图2-4所示。
图 2-4
(3)修改Details操作方法使其读取和显示一个名称为ID的输入参数。不像前面的方法那样把ID值作为一个查询字符串参数嵌入,这里是将ID值直接嵌入到URL中,如 /Demo/Deatila/5.
(4)运行程序,浏览/Demo/Details/5,结果如图2-5所示。
图 2-5
之所以直接在url请求/Demo/Details/5,是因为在ASP.NET MVC 默认路由约定好了,在Global.asax文件中可以找到: "{controller}/{action}/{id}", 具体什么意思再后面章节在讲解。
像前面的示例演示的那样,控制器操作感觉就好像是Web浏览器直接调用控制器类中的方法。类、方法和参数都被具体化为URL中的特定路径片段或查询字符串,结果就是一个返回给浏览器的字符串。这就是进行了极大的简化,但是平时我们很少返回原始的字符串,通常都是返回合适的ActionResult来处理像HTTP状态码和调用视图模板系统这样的事项。控制器通过URL被调用,然后执行自定义的代码并返回一个视图。下一章介绍控制器如何与视图结合使用。
小结:
控制器就是MVC应用程序的”指挥员“,他精心紧密地编排用户、模型对象和视图的交互。同时控制器还负责响应用户输入,操纵正确的模型对象,然后选择合适的视图显示给用户作为对最初用户输入的响应。
MVC模式中的控制器(Controller)主要负责响应用户的输入,并且在响应时通常会修改模型(Model)。通过这种方式,MVC模式中的控制器主要关注的是应用程序流,输入数据的处理,以及对相关视图(View)输出数据的提供。
MVC是基于路由机制的,URL告知路由机制去实例化哪个控制器,调用哪个操作方法,并为该方法提供需要的参数。然后由控制器的方法决定使用哪个视图,并随后对该视图进行渲染。
URL与控制器(controller)类中的某个方法有关。理解MVC模式在Web场景中工作原理的一个好方法就是记住:MVC提供的是方法调用的结果,而不是动态生成的页面。
二、创建第一个非常简单的控制器
1、创建新控制器
首先打开上一张建立的MVC项目,然后在Controller文件夹上右击选择添加--控制器菜单项,如图2-1所示。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcApplication1.Controllers { public class DemoController : Controller { // // GET: /Demo/ // public ActionResult Index() 改为:string public string Index() { //return View(); 改为返回一个字符串。 return "Hello from demo.Index()"; } // GET: /Demo/Browse public string Browse() { return "Hello from demo.Browse()"; } // GET: /Demo/Details public string Details() { return "Hello from demo.Details()"; } } }
View Code
(3)启动运行项目,然后再浏览器地址栏下输入一下URL:
/Demo
/Demo/Browse
/Demo/Details
访问这些URL会调用控制器中所对应的操作方法,比如访问/Demo/Details 调用Demo 中的Details方法,然后返回响应字符串。如图2-3所示。
图 2-3
3、经验总结
(1)"http://localhost:35396/Demo/Details"中的Demo对应控制器(DemoController)中的前缀,Details对应DemoController类中的Details方法。URL请求/Demo/Details时,Details方法就可以得到执行,这就是操作中的路由。后面还会对路由稍作介绍,第9章将会详细讲解。
(2)已经利用一个控制器在浏览器里显示了文本而没有用到模型或视图。尽管在ASP.NET MVC中模型和视图非常有用,但控制器才是真正的核心。每一个请求都必须通过控制器处理,然而其中有些是不需要利用模型和视图。
三、有参数的控制器
(1)将Browse操作方法修改为检索一个从Url传过来的查询字符串值。当方法被调用时,ASP.NET MVC会自动将查询字符串或从表单提交的参数传递给Browse操作方法。如下面代码所示:
// GET: /Demo/Browse public string Browse(string str) { string message = HttpUtility.HtmlEncode("Demo.Browse,Genre=" + str); return message; }
利用方法"HttpUtility.HtmlEncode"来预处理用户输入。这能阻止用户向视图中用连接注入JavaScript代码或者HTML标记。比如/Demo/Browse?Genre=<script>window.location="http://hacker.example.com"</script>.
(2)浏览到 /Demo/Browse?str=hello ,结果如图2-4所示。
图 2-4
(3)修改Details操作方法使其读取和显示一个名称为ID的输入参数。不像前面的方法那样把ID值作为一个查询字符串参数嵌入,这里是将ID值直接嵌入到URL中,如 /Demo/Deatila/5.
// GET: /Demo/Details public string Details(int id) { string message = "Demo.Details,ID=" + id; return message; }
(4)运行程序,浏览/Demo/Details/5,结果如图2-5所示。
图 2-5
之所以直接在url请求/Demo/Details/5,是因为在ASP.NET MVC 默认路由约定好了,在Global.asax文件中可以找到: "{controller}/{action}/{id}", 具体什么意思再后面章节在讲解。
像前面的示例演示的那样,控制器操作感觉就好像是Web浏览器直接调用控制器类中的方法。类、方法和参数都被具体化为URL中的特定路径片段或查询字符串,结果就是一个返回给浏览器的字符串。这就是进行了极大的简化,但是平时我们很少返回原始的字符串,通常都是返回合适的ActionResult来处理像HTTP状态码和调用视图模板系统这样的事项。控制器通过URL被调用,然后执行自定义的代码并返回一个视图。下一章介绍控制器如何与视图结合使用。
小结:
控制器就是MVC应用程序的”指挥员“,他精心紧密地编排用户、模型对象和视图的交互。同时控制器还负责响应用户输入,操纵正确的模型对象,然后选择合适的视图显示给用户作为对最初用户输入的响应。
相关文章推荐
- iOS 高级网络编程 第二章设计服务架构
- Unix环境高级编程 第二章 学习笔记
- 《asp.net mvc3 高级编程》第四章 模型
- 第二章:C#基础(c#高级编程 第6版)(未完)
- 《Objective-C高级编程 iOS与OS X多线程和内存管理》学习笔记——第二章Blocks
- UNIX环境高级编程——第二章 UNIX标准及实现
- 第二部分 Linux Shell高级编程技巧——第二章 Shell工具
- ASP.NET MVC3 高级编程学习笔记1——入门
- UNIX环境高级编程习题——第二章
- 《asp.net mvc3 高级编程》第一章
- 《asp.net mvc3 高级编程》第三章 视图
- xml高级编程_第二章 XML语法.doc
- “AS3.0高级动画编程”学习:第二章转向行为(下)
- ASP.NET MVC5 高级编程 第2章 控制器
- ASP.NET 3.5高级编程 第二章
- <<UNIX环境高级编程>>学习总结——第二章:UNIX标准化及实现
- 查看进程第二部分 Linux Shell高级编程技巧——第二章 Shell工具
- ASP.NET MVC3 高级编程学习笔记——入门
- 第二部分 Linux Shell高级编程技巧——第二章 Shell工具
- “AS3.0高级动画编程”学习:第二章转向行为(上)