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


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

    本教程深入研究 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

  • 相关阅读:
    js相关小实例——滚动监听
    js相关小实例——进度条
    数据库的连接
    php函数
    php语法
    php基础上
    列表 选择背景变化
    飞入
    移动列表内容
    javascript的语法
  • 原文地址:https://www.cnblogs.com/Sandheart/p/1942387.html
Copyright © 2020-2023  润新知