一步步学习ASP.NET MVC3 (7)——Controller,Action,ActionResult
请注明转载地址:http://www.cnblogs.com/arhat
前面几章我们讲解的都是关于View方面的知识,虽然还有很多关于View的知识没有讲,但是没关系,我们在后面使用到的时候在讲解,因为有些View的知识是要和Controllrer结合使用的。所以从本章开始,我们开始讲解Controller的知识。
在第二章的时候,我们简单的了解了Controller(控制器),知道他是整个MVC的核心。那么下面我们仔细的了解一下Controller。
Controller在ASP.NET MVC中负责所有的客户端与服务器之间的交互,可以说起到了核心的角色。如何更好的了解Controller呢,我们从生活中一个例子来学习。在生活中,我们假设有三个角色分别是:“厂家”,“批发商”,“零售商”。这个三个角色分别有自己的角色。大家很容易的就分析出“批发商”是中间的环节,他从“厂家”得到货物,让后“批发商”再把货物发送到“零售商”的手里进行销售,至于“零售商”如何去卖这些商品“批发商”不管,而“批发商”把货物卖给哪个“零售商”,“厂家”也不管。从这个例子中,我们和MVC结合到一起来理解,“厂家”我们可以认为是Model,“批发商”认为是Controller,而“零售商”就是View了。那么大家可以看到Controller从Model中获得数据并交给View,而View则负责显示数据。至于View怎么显示就和Controller无关了。不知道上面的例子,大家能不能明白Controller,Model,View之间的关系呢?
下面我们具体看看Controller的结构,Controller本身就是一个类,这个类有许多的方法,如果这些方法都是pubilc类型的,那么我们把这些方法称之为动作(Action)。而这写动作就是用来和客户端和服务器端的进行交互的核心。
在ASP.NET MVC中,创建一个Controller的时候,这个类必须是是以Controller来结尾的。比如我们创建一个Home控制器,那么他的类名就必须是“HomeController”,同时这个类要继承于Controller。下面我们来看一下一个HomeController。
public class HomeController : Controller { public ActionResult Index() { return View(); } }
刚才我们说过了,Controller中的公共方法就是一个Action。那么这个Controller的Index方法就是一个Action方法。从这个控制器中,我们可以看出,一个Controller基本要求是:
1,必须是public类型的类
2,Controller必须以Controller结尾
3,继承于系统提供的Controller类
4,如果是Action方法,则这个方法必须是public的。
一般情况下,当创建一个Controller的时候,那么Views文件夹下就应该有一个文件夹和这个Controller的名字一样。这个是ASP.NET MVC的约束。当然在特定的条件下,不一定非要有这个View文件夹,比如Ajax等等。
那么大家会看到Controllers文件夹下有两个Controller:About和Home。那么在Views文件下,就有两个文件和Controlller的名字一样。这两个文件夹下所存放的是有关控制器下的视图文件。
从上面的代码可以看出,HomeController中有一个Index的动作方法,那么这个方法一般情况下是要在Views/Home/下面有一个Index.cshtml的视图文件与之对应。而这个视图文件的名字要和Action的名字是一样的。当然,在后面我们会讲到Action不一定要和视图文件相对应。
上面所讲解的是Controller,Action和View之间的对应关系。下面主要来研究一个Action和View之间的实际操作。因为大家知道,实际上是Action接受了看客户端的请求,并根据客户端的请求来决定显示那个View。
那么现在问题来了,一个Action怎么知道要调用按个视图呢?我们来分析一个Action。
public ActionResult Index() { return View(); }
这个Index的动作方法,我们可以看出有两个地方需要我们注意的地方,一个是返回值的类型ActionResutl,另一个是返回值View()。我们先看一下ActionResult的解释:ActionResult是Action运行后要发送给浏览器的结果,而从帮助文档上看ActionResult是一个抽象类,那么很显然View()函数的返回值肯定是继承了ActionResult。而View()函数返回的类型是ViewResult。下面我们来主要研究一下ViewResult
ViewResult是ASP.NET MVC 中最常用的ActionResult,用于返回一个标准的View页面。而至于返回那个View就看Action的名字,一般情况下,返回的是和Action同名的View页面。所以这也是为什么执行HomeController/Index方法的时候,返回的是Views/Home/Index.cshtml文件了。
我们来看一下View()函数的定义:
protected internal ViewResult View(); protected internal ViewResult View(IView view); protected internal ViewResult View(object model); protected internal ViewResult View(string viewName); protected internal virtual ViewResult View(IView view, object model); protected internal ViewResult View(string viewName, object model); protected internal ViewResult View(string viewName, string masterName); protected internal virtual ViewResult View(string viewName, string masterName, object model);
我们看到了View()函数别重载了8次了,其中View()这个是默认的调用方式,用来返回和Action同名的视图文件。那么如果我想使用默认的视图文件怎么办?我们可以使用View(String viewName)这个重载函数。
比如我们在Views/Home创建一个新的视图文件“A.cshtml”。内容如下:
这是A页面
此时我们更改下一Index方法。
public ActionResult Index() { return View(“A”); }
按理说,在访问HomeController/Index的时候应该加载的是A.cshtml文件,那么到底是不是呢?我们预览一下,发现显示的结果的确是A页面。
那么此时,我们在更改一下Index方法。内容如下:
public ActionResult Index() { return View(“B”); }
同理,在预览器中预览的时候,应该打开的是Views/Home/B.cshtml。但是此时Views/Home/没有B.cshtml,那么会出现什么情况呢?
没有找到B页面,但同时我们了解到了View函数查找视图的顺序,如果Views/Home下面没有,则去Views/Shared中找。那么我们现在在Views/Shared中创建一个B.cshtml文件。然后在预览一下,看看结果。
至于其他的View()重载函数,大家可以自行研究,如果后续用的到,我们再去讲解。同时本章主要讲解了ActionResult的一个子类:ViewResult.也知道了ViewResult就是代表了视图文件,同时知道了ViewResult在查找视图的顺序。这能帮帮助我们在开发的时候如何去管理我们的视图文件。
那么本章就到此结束,下一章我们继续讲解ActionResult的其他子类。
一步步学习ASP.NET MVC3 (7)——Controller,Action,ActionResult的更多相关文章
- 一步步学习ASP.NET MVC3 章节总结
请注明转载地址:http://www.cnblogs.com/arhat 对于<一步步学习ASP.NET MVC3>系列工15章,那么为了方便大家能够快速的预览,老魏在这里为这个系列提供一 ...
- 一步步学习ASP.NET MVC3 (1)——基础知识
请注明转载地址:http://www.cnblogs.com/arhat 首先在这里我想声明一下,这个ASP.NET MVC3系列是我在授课过程中的一些经验,有什么不对的地方,请大家指出,我们共同的学 ...
- 一步步学习ASP.NET MVC3 (12)——FileResult
请注明转载地址:http://www.cnblogs.com/arhat 忙了两天,本来老魏昨天就应该写出新的文章,但是由于昨天雨夹雪而且加上昨天晚上加了班,到家都没饭吃了,一看时间都9点了,什么饭店 ...
- 一步步学习ASP.NET MVC3 (3)——Razor(1)
请注明转载地址:http://www.cnblogs.com/arhat 首先这个<一步步学习ASP.NET MVC3>前段时间有些忙,没有顾得上写文章,昨天呢写了3个和ASP.NET的相 ...
- 一步步学习ASP.NET MVC3 (2)——入门程序
请注明转载地址:http://www.cnblogs.com/arhat 在上一节中,我们只是简单的介绍了什么是MVC及MVC的运行原理.而本节呢,主要来实现下一ASP.NET MVC3的开发流程,并 ...
- 一步步学习ASP.NET MVC3 (14)——Route路由
请注明转载地址:http://www.cnblogs.com/arhat 由于今天是星期六,所以多写几篇,感觉前几天的忙碌没有及时发布文章,趁着周末老魏尽力的多写几篇文章.因为本系列基本上快结束了,所 ...
- 一步步学习ASP.NET MVC3 (5)——View从Action中获得数据
请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们把Razor的模板技术给大家介绍了一下,当然模板中还有其他的知识点,这个以后我们还会继续讲解.本章我们主要讨论 ...
- 一步步学习ASP.NET MVC3 (8)——EmptyResult,ContentResult,RedirectResult
请注明转载地址:http://www.cnblogs.com/arhat 上一章,我们阐述了Controller,Action和ActionResult所代表的含义及使用,本章继续研究ActionRe ...
- 一步步学习ASP.NET MVC3 (9)——JsonReslt,JavaScript,@Ajax
请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们讲述了ActionResult的三个子类,非别是EmptyResult,RediretResult和Conte ...
随机推荐
- Service的启动与停止、绑定与解绑
---恢复内容开始--- Service的意义就在于当软件停止之后还可以在背景中进行运行,换句话也就是说,比如一个音乐播放器,当我们退出音乐播放器的时候,还是希望它在背景中运行,也就是一直播放着音乐, ...
- Spring中Bean的生命中期与InitializingBean和DisposableBean接口
Spring提供了一些标志接口,用来改变BeanFactory中的bean的行为.它们包括InitializingBean和DisposableBean.实现这些接口将会导致BeanFactory调用 ...
- Linux进程IPC
IPC mechanisms supported by Linux include pipes, named pipes, semaphores, message queues, shared mem ...
- AAPT: libpng error: Not a PNG file 问题解决
导入项目到Android Studio的时候,Gradle Build失败了,报的错是 FAILURE: Build failed with an exception. Execution faile ...
- RabbitMQ 原文译1.1--HelloWord
本系列文章均来自官网原文,属于个人翻译,如有雷同,权当个人归档,忽喷. RabitMQ 是一个消息中间件,其实就是从消息生产者那里接受消息,然后发送给消息消费者.在这个传输过程中,可以定义一些缓存,持 ...
- HttpClient的使用
HttpClient的使用 一.简介 HttpClient是Apache Jakarta Common下的子项目,用来提供高效的.最新的.功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTT ...
- C# 打印文件
这几天做的功能用到了打印这个功能,直接在网上找了点demo,在这里做个备份. 1.直接打印DataTable using System; using System.Collections.Generi ...
- Java多线程编程总结(学习博客)
Java多线程编程总结:网址:http://lavasoft.blog.51cto.com/62575/27069/
- CBQW ---分组表单展示
工作流审核表单后,将表单信息展示页面中. Rest读取展示 展示方式有2 一. CBQW内容查询, 通过CBQW内容查询.分别通过设置itemstyle和header xsl ...
- Python(Django) 连接MySQL(Mac环境)
看django的文档,详细的一塌糊涂,这对文档来时倒是好事,可是数据库连接你别一带而过啊.感觉什么都想说又啥都没说明白,最有用的一句就是推荐mysqlclient.展开一个Django项目首先就是成功 ...