📅  最后修改于: 2020-11-21 05:11:58             🧑  作者: Mango
ASP.NET MVC操作方法负责执行请求并生成对此的响应。默认情况下,它以ActionResult的形式生成响应。动作通常具有与用户交互的一对一映射。
例如,在浏览器中输入URL,单击任何特定的链接,然后提交表单,等等。这些用户交互中的每一个都会导致将请求发送到服务器。在每种情况下,请求的URL都包含MVC框架用来调用操作方法的信息。对动作方法的一个限制是它们必须是实例方法,因此它们不能是静态方法。也没有返回值限制。因此,您可以返回字符串,整数等。
动作是MVC应用程序中的最终请求目的地,它使用控制器基类。让我们看一下请求处理。
当URL到达时(如/ Home / index),由UrlRoutingModule检查并了解路由表中配置的某些内容知道如何处理该URL。
UrlRoutingModule将我们在路由表中配置的信息汇总在一起,并将控制权移交给MVC路由处理程序。
MVC路由处理程序将控制器传递给作为HTTP处理程序的MvcHandler。
MvcHandler使用控制器工厂实例化控制器,并且知道要实例化哪个控制器,因为它在RouteData中查找该控制器值。
一旦MvcHandler有了控制器,MvcHandler唯一了解的就是IController接口,因此它只是告诉控制器执行。
当它告诉控制器执行时,它是从MVC的控制器基类派生的。 Execute方法创建一个动作调用者,并告诉该动作调用者去查找要调用的方法,找到要调用的动作。
动作调用者再次在RouteData中查找并找到从路由引擎传递来的动作参数。
动作基本上会返回不同类型的动作结果。 ActionResult类是所有操作结果的基础。以下是不同类型的操作结果及其行为的列表。
Sr.No. | Name and Behavior |
---|---|
1 |
ContentResult Returns a string |
2 |
FileContentResult Returns file content |
3 |
FilePathResult Returns file content |
4 |
FileStreamResult Returns file content |
5 |
EmptyResult Returns nothing |
6 |
JavaScriptResult Returns script for execution |
7 |
JsonResult Returns JSON formatted data |
8 |
RedirectToResult Redirects to the specified URL |
9 |
HttpUnauthorizedResult Returns 403 HTTP Status code |
10 |
RedirectToRouteResult Redirects to different action/different controller action |
11 |
ViewResult Received as a response for view engine |
12 |
PartialViewResult Received as a response for view engine |
我们来看上一章中创建了EmployeeController的简单示例。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MVCControllerDemo.Controllers {
public class EmployeeController : Controller{
// GET: Employee
public ActionResult Search(string name){
var input = Server.HtmlEncode(name);
return Content(input);
}
}
}
当您请求以下URL http:// localhost:61465 / Employee / Mark时,您将收到以下输出作为操作。
让我们添加另一个控制器。
步骤1-右键单击Controllers文件夹,然后选择添加→控制器。
它将显示“添加支架”对话框。
步骤2-选择“ MVC 5控制器-空”选项,然后单击“添加”按钮。
出现“添加控制器”对话框。
步骤3-将名称设置为CustomerController,然后单击“添加”按钮。
现在,您将在Controllers文件夹中看到一个新的C#文件“ CustomerController.cs”,该文件也可以在Visual Studio中进行编辑。
同样,再添加一个名称为HomeController的控制器。以下是HomeController.cs类的实现。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MVCControllerDemo.Controllers {
public class HomeController : Controller{
// GET: Home
public string Index(){
return "This is Home Controller";
}
}
}
步骤4-运行此应用程序,您将收到以下输出。
步骤5-在上面创建的客户控制器中添加以下代码。
public string GetAllCustomers(){
return @"
- Ali Raza
- Mark Upston
- Allan Bommer
- Greg Jerry
";
}
步骤6-运行此应用程序,并请求http:// localhost:61465 / Customer / GetAllCustomers 。您将看到以下输出。
您还可以重定向到同一控制器甚至其他控制器的操作。
以下是一个简单的示例,其中我们将通过使用以下代码更改HomeController中的代码来从HomeController重定向到Customer Controller。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MVCControllerDemo.Controllers{
public class HomeController : Controller{
// GET: Home
public ActionResult Index(){
return RedirectToAction("GetAllCustomers","Customer");
}
}
}
如您所见,我们使用了RedirectToAction()方法ActionResult,该方法带有两个参数,动作名称和控制器名称。
运行此应用程序时,您会看到默认路由会将其重定向到/ Customer / GetAllCustomers