一步步学习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 ...
随机推荐
- Nodepad ++
Nodepad ++是一个很好用的记事本工具.轻巧.打开文本速度要比windows内置的记事本快,而且功能众多. 支持多种语言,关键字高亮显示 并且可以折叠 内置n种主题,随时换 文件内容一变随时提醒 ...
- Mysql在windows下的免安装配置步骤和重新安装的步骤
windows下mysql免安装配置 1. 下载mysql免安装压缩包 下载mysql-5.6.22-winx64.zip 解压到本地D:\mysql-5.6.22-winx64 2. 修改配置文件 ...
- show variables 详解
back_log MySQL主线程检查连接并启动一个新线程这段时间内,可以设置多少个请求可以被存在堆栈中 connect_timeout 连接超时 检测方法nmap -p3306 数据库ip dela ...
- hdu 1093 A+B for Input-Output Practice (V)
A+B for Input-Output Practice (V) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3276 ...
- xml的语法与创建
xml语法很简单,但很严格,如果出现错误则不能正常解析,而HTML如果出现局部的错误,照样解析 xml第一行必须写xml头<?xml version='1.0' encoding='utf8'? ...
- 组装和拆分JSON
1.组装JSON rs["msg"] = "success"; rs[" ...
- 【JQuery基础教程(第三版)图灵】笔记
第1章 jQuery入门 1.jQuery官方网站:http://jquery.com 2.开发工具:Firebug 第2章 选择元素 1.属性选择符:属性选择符通过HTML元素的 ...
- Unity3d 播放高质量视频解决方案
Unity3d 播放高质量视频解决方案~ 最近在折腾一个视频游戏.真的是一个视频游戏,游戏主背景是个大视频.可能切换三四个视频,而且需要无缝切换. 平台是安卓,蕊片是rockclip.找了各式各样的插 ...
- System.Data.SqlClient.SqlError: 对文件……的目录查找失败[转]
System.Data.SqlClient.SqlError: 对文件……的目录查找失败,出现操作系统错误 3 的处理办法 在还原SQL SERVER数据库时出现了查找目录失败的原因,困扰了我一个多小 ...
- C# is 强制转换
在平时开发中,经常遇上强制转换,在这过程中经常遇上null对象转换为值类型,如果不判断的情况下在编译的时候不会出错,但程序一运行就抛出错误.好在C#为我们提供了is ,它判断一个对象如果成立就转换,如 ...