神州教育培训网 打造高端培训课程,传播精品教育理念! 神州教育 神州培训 教育 企业培训 企业内训 企业管理 研修课程 简章 资本运作 房地产 国学 名师推荐

了解控制器、控制器操作和操作结果

了解控制器、控制器操作和操作结果

本教程深入研究 ASP.NET MVC 控制器、控制器操作和操作结果。学习完本教程后,您将了解如何使用控制器控制访问者与 ASP.NET MVC 网站交互的方式。

了解控制器

MVC 控制器负责响应针对 ASP.NET MVC 网站发出的请求。每个浏览器请求被映射到一个特定的控制器。例如,假设将下面的 URL 输入到浏览器的地址栏:

http://localhost/Product/Index/3

在这种情况下,将激活名称为 ProductController 的控制器。ProductController 负责响应浏览器请求。例如,控制器可能向浏览器返回特定的视图,或者控制器可能将用户重定向到另一个控制器。

通过向 ASP.NET MVC 应用程序的 Controllers 文件夹添加新的控制器,可以创建新的控制器。右键单击 Controller 文件夹并选择菜单选项 Add,New Item,然后选择 MVC Controller Class 模板,如图 1 所示。控制器名称必须包含后缀 Controller。例如,控制器名称 ProductController 完全符合要求,而 Product 则为无效名称。

 

图 1:创建新的控制器( 单击查看大图

如果创建新的名称为 ProductController 的控制器,则将得到如程序清单 1 中的文件。

程序清单 1 ProductController.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6.  
  7. namespace MvcApp.Controllers
  8. {
  9.      public class ProductController : Controller
  10.      {
  11.           public ActionResult Index()
  12.           {
  13.                // Add action logic here
  14.                throw new NotImplementedException();
  15.           }
  16.      }
  17. }

如程序清单 1 所示,控制器只是一个类(Visual Basic .NET 或 C# 类)。控制器是派生自基础类 System.Web.Mvc.Controller 的类。由于控制器继承自这个基础类,所以控制器自由地继承了许多有用的方法(稍后我们将讨论这些方法)。

了解控制器操作

控制器公开控制器操作。操作是控制器上的方法,在浏览器的地址栏中输入特定 URL 时被调用。例如,假设要请求下面的 URL:

http://localhost/Product/Index/3

在这种情况下,调用 ProductController 类上的 Index() 方法。Index() 方法是控制器操作的一个示例。

控制器操作必须是控制器类的公共方法。默认情况下,C# 方法是私有方法。请注意,任何添加到控制器类的公共方法都自动公开为控制器操作(必须小心对待这个问题,因为任何人都可以简单地通过在浏览器地址栏中键入正确的 URL 激活控制器操作)。

控制器操作还必须满足一些其他要求。用作控制器操作的方法不能重载。更进一步讲,控制器操作不能是静态方法。除此之外,可以将任何方法用作控制器操作。

了解操作结果

控制器操作返回的内容称为操作结果。操作结果是控制器响应浏览器请求而返回的内容。

ASP.NET MVC Framework 支持 6 种标准类型的操作结果:

  1. ViewResult – 代表 HTML 和标记。
  2. EmptyResult – 代表无结果。
  3. RedirectResult – 代表重定向到新的 URL。
  4. RedirectToRouteResult – 代表重定向到新的控制器操作。
  5. JsonResult – 代表可以在 AJAX 应用程序中使用的 JavaScript Object Notation 结果。
  6. ContentResult – 代表文本结果。

所有这些操作结果都继承自基础的 ActionResult 类。

在大多数情况下,控制器操作返回 ViewResult。例如,程序清单 2 中的 Index 控制器操作返回 ViewResult。

程序清单 2 BookController.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6.  
  7. namespace MvcApp.Controllers
  8. {
  9.      public class BookController : Controller
  10.      {
  11.           public ActionResult Index()
  12.           {
  13.                return View();
  14.           }
  15.      }
  16. }

当操作返回 ViewResult 时,向浏览器返回 HTML。程序清单 2 中的 Index() 方法将名称为 Index.aspx 的视图返回给浏览器。

请注意,程序清单 2 中的 Index() 操作未返回 ViewResult()。而是调用了 Controller 基础类的 View() 方法。通常,不直接返回操作结果。而是调用以下 Controller 基础类的方法之一:

  1. View – 返回 ViewResult 操作结果。
  2. Redirect – 返回 RedirectResult 操作结果。
  3. RedirectToAction – 返回 RedirectToRouteResult 操作结果。
  4. RedirectToRoute – 返回 RedirectToRouteResult 操作结果。
  5. Json – 返回 JsonResult 操作结果。
  6. Content – 返回 ContentResult 操作结果。

所以,如果希望将 View 返回给浏览器,则需要调用 View() 方法。如果希望将用户从一个控制器操作重定向到另一个控制器操作,则需要调用 RedirectToAction() 方法。例如,程序清单 3 中的 Details() 操作显示一个视图或将用户重定向到 Index() 操作,具体取决于 ID 参数是否拥有值。

程序清单 3 CustomerController.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6.  
  7. namespace MvcApp.Controllers
  8. {
  9.      public class CustomerController : Controller
  10.      {
  11.           public ActionResult Details(int? Id)
  12.           {
  13.                if (Id == null)
  14.                     return RedirectToAction("Index");
  15.                return View();
  16.           }
  17.  
  18.           public ActionResult Index()
  19.           {
  20.                return View();
  21.           }
  22.      }
  23. }

ContentResult 操作结果比较特殊。可以使用 ContentResult 操作结果返回一个纯文本操作结果。例如,程序清单 4 中的 Index() 方法返回纯文本消息,而不是 HTML 消息。

程序清单 4 StatusController.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6.  
  7. namespace MvcApp.Controllers
  8. {
  9.      public class StatusController : Controller
  10.      {
  11.           public ContentResult Index()
  12.           {
  13.                return Content("Hello World!");
  14.           }
  15.      }
  16. }

当激活 StatusController.Index() 操作时,不返回视图。而是向浏览器返回原始的文本“Hello World!”。

如果控制器操作返回的结果不是操作结果 – 例如,一个日期或整数 – 那么结果自动封装在 ContentResult 中。例如,程序清单 5 中的 WorkController 的 Index() 操作被激活时,自动将日期作为 ContentResult 返回。

程序清单 5 WorkController.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6.  
  7. namespace MvcApp.Controllers
  8. {
  9.      public class WorkController : Controller
  10.      {
  11.           public DateTime Index()
  12.           {
  13.                return DateTime.Now;
  14.           }
  15.      }
  16. }

程序清单 5 中的 Index() 操作返回 DateTime 对象。ASP.NET MVC Framework 将 DateTime 对象转换为字符串,并将 DateTime 值自动封装在 ContentResult 中。浏览器检索纯文本日期和时间。

总结

本教程的目的是向读者介绍 ASP.NET MVC 控制器、控制器操作和控制器操作结果的概念。在第一部分中,我们学习了如何向 ASP.NET MVC 项目添加新控制器。接下来,我们学习了如何将控制器的公共方法作为控制器操作公开。最后,我们讨论了可以从控制器操作返回的不同类型的操作结果。我们还专门讨论了如何从控制器操作返回 ViewResult、RedirectToActionResult 和 ContentResult。

 

http://msdn.microsoft.com/zh-cn/dd320337

posted on 2011-01-23 11:35  努力&快乐  阅读(1192)  评论(0编辑  收藏  举报

导航

神州教育培训网 打造高端培训课程,传播精品教育理念! 神州教育 神州培训 教育 企业培训 企业内训 企业管理 研修课程 简章 资本运作 房地产 国学 名师推荐