请注明转载地址: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。

  1. public class HomeController : Controller
  2.  
  3. {
  4.  
  5. public ActionResult Index()
  6.  
  7. {
  8.  
  9. return View();
  10.  
  11. }
  12.  
  13. }

刚才我们说过了,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。

  1. public ActionResult Index()
  2.  
  3. {
  4.  
  5. return View();
  6.  
  7. }

这个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()函数的定义:

  1. protected internal ViewResult View();
  2.  
  3. protected internal ViewResult View(IView view);
  4.  
  5. protected internal ViewResult View(object model);
  6.  
  7. protected internal ViewResult View(string viewName);
  8.  
  9. protected internal virtual ViewResult View(IView view, object model);
  10.  
  11. protected internal ViewResult View(string viewName, object model);
  12.  
  13. protected internal ViewResult View(string viewName, string masterName);
  14.  
  15. protected internal virtual ViewResult View(string viewName, string masterName, object model);

我们看到了View()函数别重载了8次了,其中View()这个是默认的调用方式,用来返回和Action同名的视图文件。那么如果我想使用默认的视图文件怎么办?我们可以使用View(String viewName)这个重载函数。

比如我们在Views/Home创建一个新的视图文件“A.cshtml”。内容如下:

  1. 这是A页面

此时我们更改下一Index方法。

  1. public ActionResult Index()
  2.  
  3. {
  4.  
  5. return View(“A”);
  6.  
  7. }

按理说,在访问HomeController/Index的时候应该加载的是A.cshtml文件,那么到底是不是呢?我们预览一下,发现显示的结果的确是A页面。

那么此时,我们在更改一下Index方法。内容如下:

  1. public ActionResult Index()
  2.  
  3. {
  4.  
  5. return View(“B”);
  6.  
  7. }

同理,在预览器中预览的时候,应该打开的是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的更多相关文章

  1. 一步步学习ASP.NET MVC3 章节总结

    请注明转载地址:http://www.cnblogs.com/arhat 对于<一步步学习ASP.NET MVC3>系列工15章,那么为了方便大家能够快速的预览,老魏在这里为这个系列提供一 ...

  2. 一步步学习ASP.NET MVC3 (1)——基础知识

    请注明转载地址:http://www.cnblogs.com/arhat 首先在这里我想声明一下,这个ASP.NET MVC3系列是我在授课过程中的一些经验,有什么不对的地方,请大家指出,我们共同的学 ...

  3. 一步步学习ASP.NET MVC3 (12)——FileResult

    请注明转载地址:http://www.cnblogs.com/arhat 忙了两天,本来老魏昨天就应该写出新的文章,但是由于昨天雨夹雪而且加上昨天晚上加了班,到家都没饭吃了,一看时间都9点了,什么饭店 ...

  4. 一步步学习ASP.NET MVC3 (3)——Razor(1)

    请注明转载地址:http://www.cnblogs.com/arhat 首先这个<一步步学习ASP.NET MVC3>前段时间有些忙,没有顾得上写文章,昨天呢写了3个和ASP.NET的相 ...

  5. 一步步学习ASP.NET MVC3 (2)——入门程序

    请注明转载地址:http://www.cnblogs.com/arhat 在上一节中,我们只是简单的介绍了什么是MVC及MVC的运行原理.而本节呢,主要来实现下一ASP.NET MVC3的开发流程,并 ...

  6. 一步步学习ASP.NET MVC3 (14)——Route路由

    请注明转载地址:http://www.cnblogs.com/arhat 由于今天是星期六,所以多写几篇,感觉前几天的忙碌没有及时发布文章,趁着周末老魏尽力的多写几篇文章.因为本系列基本上快结束了,所 ...

  7. 一步步学习ASP.NET MVC3 (5)——View从Action中获得数据

    请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们把Razor的模板技术给大家介绍了一下,当然模板中还有其他的知识点,这个以后我们还会继续讲解.本章我们主要讨论 ...

  8. 一步步学习ASP.NET MVC3 (8)——EmptyResult,ContentResult,RedirectResult

    请注明转载地址:http://www.cnblogs.com/arhat 上一章,我们阐述了Controller,Action和ActionResult所代表的含义及使用,本章继续研究ActionRe ...

  9. 一步步学习ASP.NET MVC3 (9)——JsonReslt,JavaScript,@Ajax

    请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们讲述了ActionResult的三个子类,非别是EmptyResult,RediretResult和Conte ...

随机推荐

  1. Mybatis案例

    MyBatis MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架. MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索. MyBatis 可 ...

  2. 数据结构与算法分析(2)——表、栈和队列

      抽象数据类型     抽象数据类型(ADT)是一系列操作的集合.诸如表.集合.图和他们的操作一起可以看做是抽象数据类型 表 List 表的实现有两种:数组和链表.数组实现的表在插入和删除操作上的花 ...

  3. opencv中的基本拼接

    普通版的图像拼接,事实上非常简单并且效果不很差. 实现方式: 新建工程: 去opencv里面[f:\opencv249\opencv\sources\samples\cpp]把stitching.cp ...

  4. Flash cs6 如何从FLA 文件导出sound文件

    Flash. How to export sound from the FLA file extract sound from a fla 第一个是图文教程,在下面还有"watch vide ...

  5. hasshmap输出value

    import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; pub ...

  6. Ehcache - hello world

    Key Classes CacheManager The CacheManager class is used to manage caches. Creation of, access to, an ...

  7. js实现图片滑动显示效果

    js实现图片滑动显示效果 今天用户提出一个需求,要实现一个滑动显示新闻列表的效果,具体就是图片新闻自动滑动显示,鼠标移上去就停止滑动,移开就继续滑动:效果如下: 第一:先用HTML和CSS实现显示,主 ...

  8. listview使用checkbox批量删除出现的问题

    1.选中前面的checkbox导致后的checkbox被选中 2.选中后下滑listview,再上滑时被选中的checkbox又变成未选中状态. 问题大都是因为对listview进行代码优化重用con ...

  9. shell小程序

    因此需要挑选学生,因此需要一个抓阄的程序:要求:1.执行脚本后,想去的同学输入英文名字全拼,产生随机数01-99之间的数字,数字越大就去参加项目实践,前面已经抓到的数字,下次不能在出现相同数字.2.第 ...

  10. Objective-C 学习笔记(Day 1)

    -------------------------------------------- Hello World //引入头文件 //c中的引入头文件的方式 //#include <stdio. ...