ASP.NET MVC 控制器概述 (VB)

作者 :Stephen Walther

在本教程中,Stephen Walther 介绍了 ASP.NET MVC 控制器。 你将了解如何创建新控制器并返回不同类型的操作结果。

本教程探讨 ASP.NET MVC 控制器、控制器操作和操作结果的主题。 完成本教程后,你将了解如何使用控制器来控制访问者与 ASP.NET MVC 网站的交互方式。

了解控制器

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

http://localhost/Product/Index/3

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

列表 1 包含名为 ProductController 的简单控制器。

Listing1 - Controllers\ProductController.vb

Public Class ProductController
    Inherits System.Web.Mvc.Controller

    '
    ' GET: /Products/

    Function Index()
        ' Add action logic here
        Return View()
    End Function

End Class

如清单 1 所示,控制器只是 Visual Basic .NET 或 C# 类) (类。 控制器是派生自基本 System.Web.Mvc.Controller 类的类。 由于控制器继承自此基类,因此控制器会免费继承几种有用的方法 (我们将在) 讨论这些方法。

了解控制器操作

控制器公开控制器操作。 操作是在控制器上的方法,当你在浏览器地址栏中输入特定 URL 时,将调用该方法。 例如,假设你对以下 URL 发出请求:

http://localhost/Product/Index/3

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

控制器操作必须是控制器类的公共方法。 默认情况下,视觉对象 Basic.NET 方法是公共方法。 请注意,添加到控制器类的任何公共方法都会自动公开为控制器操作, (你必须小心这一点,因为只需在浏览器地址栏中键入正确的 URL) 即可调用控制器操作。

控制器操作必须满足一些其他要求。 用作控制器操作的方法不能重载。 此外,控制器操作不能是静态方法。 除此之外,还可以将几乎所有方法用作控制器操作。

了解操作结果

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

ASP.NET MVC 框架支持多种类型的操作结果,包括:

  1. ViewResult - 表示 HTML 和标记。
  2. EmptyResult - 表示无结果。
  3. RedirectResult - 表示重定向到新 URL。
  4. JsonResult - 表示可在 AJAX 应用程序中使用的 JavaScript 对象表示法结果。
  5. JavaScriptResult - 表示 JavaScript 脚本。
  6. ContentResult - 表示文本结果。
  7. FileContentResult - 表示具有二进制内容) 的可下载文件 (。
  8. FilePathResult - 表示具有路径) 的可下载文件 (。
  9. FileStreamResult - 表示具有文件流) 的可下载文件 (。

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

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

列表 2 - Controllers\BookController.vb

Public Class BookController
    Inherits System.Web.Mvc.Controller

    Function Index()
        Return View()
    End Function

End Class

当操作返回 ViewResult 时,HTML 将返回到浏览器。 列表 2 中的 Index () 方法向浏览器返回名为 Index 的视图。

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

  1. 视图 - 返回 ViewResult 操作结果。
  2. 重定向 - 返回 RedirectResult 操作结果。
  3. RedirectToAction - 返回 RedirectToRouteResult 操作结果。
  4. RedirectToRoute - 返回 RedirectToRouteResult 操作结果。
  5. Json - 返回 JsonResult 操作结果。
  6. JavaScriptResult - 返回 JavaScriptResult。
  7. 内容 - 返回 ContentResult 操作结果。
  8. File - 根据传递给方法的参数返回 FileContentResult、FilePathResult 或 FileStreamResult。

因此,如果要将 View 返回到浏览器,请调用 View () 方法。 如果要将用户从一个控制器操作重定向到另一个控制器操作,请调用 RedirectToAction () 方法。 例如,列表 3 中的 Details () 操作要么显示视图,要么根据 Id 参数是否具有值将用户重定向到 Index () 操作。

清单 3 - CustomerController.vb

Public Class CustomerController
    Inherits System.Web.Mvc.Controller

    Function Details(ByVal id As Integer?)
        If Not id.HasValue Then
            Return RedirectToAction("Index")
        End If

        Return View()
    End Function
    Function Index()
        Return View()
    End Function

End Class

ContentResult 操作结果很特殊。 可以使用 ContentResult 操作结果以纯文本形式返回操作结果。 例如,列表 4 中的 Index () 方法以纯文本而不是 HTML 形式返回消息。

清单 4 - Controllers\StatusController.vb

StatusController

System.Web.Mvc.Controller

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()
        Return DateTime.Now
    End Function

End Class

列表 5 中的 Index () 操作返回 DateTime 对象。 ASP.NET MVC 框架将 DateTime 对象转换为字符串,并将 DateTime 值自动包装在 ContentResult 中。 浏览器以纯文本形式接收日期和时间。

总结

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