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

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

成都创新互联服务项目包括宁县网站建设、宁县网站制作、宁县网页制作以及宁县网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,宁县网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到宁县省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

理解控制器

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

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

网站名称:ASP.NETMVC教程:理解控制器、控制器行为和行为结果
URL链接:http://www.hantingmc.com/qtweb/news17/404767.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联