ASP.NET MVC教程:理解控制器、控制器行为和行为结果

原创
开发 后端
本文系统地讲解了ASP.NET MVC控制器、控制器行为和行为结果,当你阅读完本文后,你就会知道控制器是如何控制访问者与ASP.NET MVC网站进行互动的了。

上一篇:ASP.NET MVC教程:创建TaskList应用程序

【51CTO快译】

理解控制器

MVC控制器负责处理对ASP.NET MVC网站的请求,每个浏览器请求都被映射到一个特殊的控制器上,例如,假设你在你的浏览器地址栏中输入下面的URL:

http://localhost/Product/Index/3

这时会调用ProductController控制器,productController负责产生浏览器请求对应的响应,例如,控制器可能返回一个特定的视图给浏览器,或控制器将用户重定向到另一个控制器。

在你的ASP.NET MVC应用程序的控制器文件夹下创建一个新的控制器,在控制器文件夹上点右键,选择“添加” > “新项目”,然后选择MVC控制器类模板(如图1所示),控制器名称后缀必须包括Controller,例如,productController控制器。


1  创建新控制器

如果你创建的新控制器名叫productController,那么你的文件内容就如清单1所示。

清单1 productController.vb

Public Class ProductController 
     Inherits System.Web.Mvc.Controller 
     Function Index() 
          ' Add action logic 
here           Throw New 
NotImplementedException()      End Function End Class 

正如你在清单1中所看到的,控制器就是一个类(Visual Basic .NET或c#类),控制器是一个衍生于System.Web.Mvc.Controller基础类的类,因为控制器继承了这个类,因此就继承了多个有用的方法。

理解控制器行为

控制器暴露控制器行为,当你在你的浏览器地址栏中输入一个特定的URL时就会调用一个控制器行为,例如,假设你输入了下面的URL:

http://localhost/Product/Index/3

在这个例子中,调用了productController类的Index()方法,Index()方法是控制器行为的一个例子。

控制器行为必须是控制器类的一个公共方法,默认情况下,Visual Basic .NET函数是公共函数,这意味着默认情况下,任何添加到控制器类的函数都作为一个控制器行为暴露在外(你必须小心这一点,因为控制器行为可以被任何人调用)。

有几个额外的需求必须满足控制器行为,作为控制器行为的方法不能超载,而且,控制器行为不能是一个共享的方法,除此之外,你可以将任何方法当做控制器行为使用。

#p#

理解行为结果

控制器行为返回的事物叫做行为结果,一个行为结果就是控制器行为返回给浏览器请求的响应。

ASP.NET MVC框架支持六个标准类型的行为结果:

1.视图结果(ViewResult):表示HTML和标记。

2.空结果(EmptyResult):表示没有结果。

3.重定向结果(RedirectResult):表示重定向到一个新的URL。

4.重定向到路由结果(RedirectToRouteResult):表示重定向到一个新的控制器行为。

5.JsonResult:表示可以用于AJAX应用程序的JavaScript对象标记结果。

6.内容结果(ContentResult):表示一个文本结果。

这些行为结果都继承自基础行为结果(ActionResult)类。

大多数情况下,控制器行为返回视图结果,例如,清单2中的Index控制器行为返回一个视图结果。

清单2 BookController.vb

Public Class BookController 
     Inherits System.Web.Mvc.Controller 
     Function Index() 
          Return View() 
     End Function End Class 

当一个行为返回一个视图结果时,返回给浏览器的就是HTML,清单2 中的Index()方法返回一个名叫Index.aspx视图给浏览器。

注意清单2 中的Index()行为没有返回ViewResult(),相反,控制器基础类的View()方法被调用,正常情况下,你不用直接返回一个行为结果,相反,你可以调用下面的控制器基础类方法:

1.View:返回一个ViewResult行为结果。

2.Redirect:返回一个RedirectResult行为结果。

3.RedirectToAction:返回一个RedirectToActionResult行为结果。

4.RedirectToRoute:返回一个RedirectToRouteResult行为结果。

5.Json:返回一个JsonResult行为结果。

6.Content:返回一个ContentResult行为结果。

因此,如果你想返回一个视图(View)给浏览器,可以调用View()方法,如果你想将用户重定向到另一个控制器,可以调用RedirectToAction() 方法,例如,清单3中的Details()行为要么显示一个视图,要么重定向到Index()行为,这依赖于Id参数是否有值。

清单3 CustomerController.vb

Public Class CustomerController 
     Inherits System.Web.Mvc.Controller 
     Function Details(ByVal Id As Integer?) 
          If IsNothing(Id) 
Then 
               Return 
RedirectToAction("Index") 
          End If 
          Return View() 
     End Function 
     Function Index() 
          Return View() 
     End Function End Class

ContentResult行为结果是特殊的,你可以使用ContentResult行为结果返回一个明文行为结果,例如,清单4中的Index()方法返回一个明文消息而不是HTML。

清单4 StatusController.vb

Public Class StatusController 
     Inherits System.Web.Mvc.Controller 
     Function Index() 
          Return 
Content("Hello World!")      End Function End Class 

当StatusController.Index() 行为被调用时,不会返回一个视图,相反,会返回一个原始文本“Hello World!”给浏览器。

如果控制器行为返回的结果不是一个行为结果,例如,一个日期或一个整数,那么ContentResult中的结果会自动换行,例如,清单5中的WorkController Index()行为被调用时,ContentResult会自动作为一个日期返回。

清单5 WorkController.vb

Public Class WorkController 
     Inherits System.Web.Mvc.Controller 
     Function Index() As DateTime 
          Return DateTime.Now 
     End Function End Class 

清单5中的Index()行为返回一个DateTime对象,ASP.NET MVC框架会将DateTime对象转换成一个字符串,并且在ContentResult中的DateTime值会自动换行,浏览器接收日期和时间的明文。

小结

本文的目的是向你介绍ASP.NET MVC控制器、控制器行为和控制器行为结果的概念,在***小节中,你学习了如何添加新的控制器到一个ASP.NET MVC项目,接下来,你学习了控制器的公共方法是如何作为控制器行为暴露给所有人的,***,我们讨论了控制器行为返回的不同类型的行为结果,特别是如何从控制器行为返回一个视图结果、重定向到行为结果和内容结果。

原文:Understanding Controllers, Controller Actions, and Action Results   

作者:Stephen Walther

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【编辑推荐】

  1. ASP.NET MVC教程:创建TaskList应用程序
  2. ASP.NET MVC教程:理解模型、视图和控制器
  3. ASP.NET MVC框架视频教程
责任编辑:杨鹏飞 来源: 51CTO
相关推荐

2011-08-08 10:46:15

ASP.NET MVC

2012-02-03 09:06:53

ASP.NET MVC

2015-02-02 09:37:42

SDN控制器

2011-07-12 13:52:04

域控制器ASP.NET

2011-07-14 10:28:54

额外域控制器

2015-08-07 15:28:46

选取城市控制器源码

2023-08-13 18:31:45

SDN控制器

2011-03-08 08:58:37

springmvc

2011-07-12 09:29:10

主域控制器备份域控制器

2023-11-19 18:46:04

智能控制器芯片

2013-12-19 09:32:01

SDN南向网络控制

2017-11-23 17:27:35

Yii框架IntelYii框架深度剖析

2015-02-27 10:52:17

SDN

2011-07-13 10:29:44

域控制器

2011-07-18 13:55:08

2012-02-24 10:57:43

2011-07-07 15:01:02

2011-07-13 09:00:59

域控制器Active Dire

2013-06-08 09:50:30

SDN控制器应用OpenFlow软件定义网络

2021-11-25 14:44:51

Kubernetes复制控制器
点赞
收藏

51CTO技术栈公众号