ASP.NET MVC教程:理解控制器、控制器行为和行为结果
创始人
2024-03-20 11:31:51
0

上一篇: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框架视频教程

相关内容

热门资讯

施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...
VMware vFabric (2012年5月17日中国北京)——全球虚拟化和云基础架构厂商VMware公司(NYSE:VMW)今...
由浅入深学习CentOS入门 在系统的学习CentOS入门的知识中,我们掌握了一些基本的设置。今天我们来讲一下CentOS入门中的...
虚拟现实 人工智能和人体未来会... 探讨像虚拟现实和人工智能这样的技术将会跟人体发生怎样的融合。未来将会出现模糊虚拟现实和现实本身界限的...