Trong hướng dẫn này, chúng ta sẽ thảo luận về ActionResult trong ASP.NET Core. Trong các hướng dẫn trước, chúng ta đã sử dụng các lớp C# đơn giản làm controller.
Các lớp này không kế thừa từ một lớp cơ sở và bạn có thể sử dụng cách tiếp cận này với MVC, nhưng một cách phổ biến và hiệu quả hơn đó là kế thừa từ lớp Controller
cơ sở được cung cấp trong namespace Microsoft.AspNet.Mvc
.
Controller
cơ sở này cho phép chúng ta truy cập vào nhiều thông tin theo ngữ cảnh về một yêu cầu, cũng như các phương thức giúp chúng ta xây dựng kết quả để trả về cho khách hàng.IActionResult
.Phương thức hành động (action method) về cơ bản trả về các kiểu ActionResult khác nhau. Lớp ActionResult
là lớp cơ sở cho tất cả các kiểu ActionResult. Sau đây là danh sách các kiểu ActionResult.
Tên | Miêu tả |
---|---|
ContentResult | Trả về một chuỗi |
FileContentResult | Trả về nội dung file |
FilePathResult | Trả về nội dung file |
FileStreamResult | Trả về nội dung file. |
EmptyResult | Trả về rỗng |
JavaScriptResult | Trả về tập lệnh để thực thi |
JsonResult | Trả về dữ liệu được định dạng JSON |
RedirectToResult | Chuyển hướng đến URL được chỉ định |
HttpUnauthorizedResult | Trả về mã trạng thái 403 HTTP |
RedirectToRouteResult | Chuyển hướng đến hành động khác nhau / hành động điều khiển khác nhau |
ViewResult | Nhận được như một phản hồi cho view engine |
PartialViewResult | Nhận được như một phản hồi cho view engine |
Chúng ta hãy thực hiện một ví dụ đơn giản bằng cách mở lớp HomeController và cho nó kế thừa từ lớp Controller
. Lớp Controller
nằm trong namespace Microsoft.AspNet.Mvc
. Sau đây là mã của lớp HomeController sau khi chỉnh sửa.
using Microsoft.AspNet.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace FirstAppdemo.Controllers
{
public class HomeController : Controller
{
public ContentResult Index()
{
return Content("Hello, World! this message is from
Home Controller using the Action Result");
}
}
}
Bây giờ bạn có thể thấy rằng phương thức Index
trả về ContentResult
, một trong những kiểu ActionResult và tất cả các kiểu ActionResult đều kế thừa từ lớp ActionResult.
Trong phương thức Index
, chúng ta đã chuyển một chuỗi vào phương thức Content
. Phương thức Content
này trả về một thể hiện của lớp ContentResult
điều này có nghĩa là phương thức Index
sẽ trả về ContentResult.
Chúng ta lưu lớp HomeController và chạy ứng dụng trong trình duyệt. Nó sẽ tạo ra kết quả như hình sau.
Bây giờ bạn có thể thấy ứng dụng trả về văn bản đơn giản không khác bất kỳ phản hồi nào chúng ta đã thấy trước đây. Bạn có thể tự hỏi lợi thế của việc sử dụng ActionResult là gì.
Hãy để chúng tôi lấy một ví dụ khác. Tạo một thư mục mới trong dự án và gọi nó là Models. Trong thư mục Models, chúng tôi muốn thêm một lớp có thể đại diện cho Employee.
Nhập Employee.cs vào trường Name như trong ảnh chụp màn hình ở trên. Lớp Employee rất đơn giản chỉ chứa hai thuộc tính.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace FirstAppDemo.Models
{
public class Employee
{
public int ID { get; set; }
public string Name { get; set}
}
}
Bên trong phương thức hành động Index
của HomeController, chúng tôi muốn trả về một đối tượng Employee. Sau đây là mã của HomeController sau khi đã cập nhật.
using FirstAppDemo.Models;
using Microsoft.AspNet.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace FirstAppdemo.Controllers
{
public class HomeController : Controller
{
public ObjectResult Index()
{
var employee = new Employee
{
ID = 1,
Name = "Mark Upston"
};
return new ObjectResult(employee);
}
}
}
Bây giờ, thay vì trả về ContentResult, chúng tôi sẽ trả về một loại kết quả khác được gọi là ObjectResult. Nếu chúng ta muốn có một ObjectResult, chúng ta cần khởi tạo một ObjectResult và truyền vào cho nó một đối tượng model.
Lưu tất cả các file của bạn và nhấn F5 để chạy ứng dụng trên trình duyệt. Bạn sẽ thấy kết quả như.
Bây giờ chúng ta sẽ cập nhật lại phương thức hành động Index
của HomeController như sau.
using FirstAppDemo.Models;
using Microsoft.AspNet.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace FirstAppdemo.Controllers
{
public class HomeController : Controller
{
public ViewResult Index()
{
var employee = new Employee
{
ID = 1,
Name = "Mark Upston"
};
return View(employee);
}
}
}
Bên trong HomeController, thay vì trả về ObjectResult, chúng ta trả về phương thức View(employee)
. Phương thức View
trả về đối tượng kiểu ViewResult, vì vậy chúng ta cũng sẽ thay đổi kiểu trả về của phương thức Index
thành ViewResult. Đây là kết quả khi chạy chương trình:
Như bạn thấy ở trên, ứng dụng hiện một thông báo lỗi. Lỗi này là do ASP.NET Core không tìm thấy view Index.cshtml
ở trong thư mục /View/Home
hoặc /View/Shared
.
Index.cshtml
trong thư mục /Views/Home
./View/Shared
. Nếu bạn đặt view trong thư mục /Views/Shared
thì bạn có thể sử dụng chúng ở bất cứ đâu trong ứng dụng.Bây giờ chúng ta hãy tạo file Index.cshtml ở thư mục /Views/Home
. Đầu tiên chúng ta sẽ tạo thư mục Home
trong thư mục Views
, tất cả các view của HomeController sẽ đặt trong thư mục này. Nếu bạn có controller khác tên là BookController thì bạn sẽ tạo thư mục tên Book
trong thư mục Views
, thật đơn giản phải không nào. Bạn nhấp chuột phải vào thư mục Home và chọn Add → New Item.
Bạn chọn MVC View Page và nhập index.cshtml vào trường Name và nhấp vào nút Add.
Chúng tôi thêm đoạn mã sau vào file Index.cshtml.
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>Home</title>
</head>
<body>
<h1>Welcome!</h1>
<div>
@Model.Name
</div>
</body>
</html>
Khi chúng tôi sử dụng dấu @ trong Razor, thì Razor view engine sẽ xử lý bất cứ điều gì bạn nhập như một biểu thức C#. Razor view có một số thành viên tích hợp mà chúng ta có thể sử dụng để truy cập vào các biểu thức C#. Một trong những thành viên quan trọng nhất là Model. Khi bạn sử dụng @Model có nghĩa là bạn sẽ nhận được đối tượng model mà bạn đã truyền vào view từ controller (chính là đoạn return view(employee);
- bạn đã truyền đối tượng employee cho view). Vì vậy @Model.Name sẽ hiển thị tên của nhân viên.
Bây giờ chúng ta chạy chương trình và sẽ thấy kết quả như sau.
Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.
Trong bài viết này, chúng ta sẽ tìm hiểu cách đặt tên cho các endpoint để có thể tạo liên kết đến chúng từ bất kỳ đâu trong ứng dụng ASP.NET Core.
Trong bài viết này, chúng ta sẽ khám phá Model trong ASP.NET Core và các sub-framework khác như ASP.NET Core MVC, Razor Pages, Endpoints và Blazor.
Bài viết này sẽ giới thiệu cho bạn những điều cơ bản về việc thiết lập một dự án ASP.NET Core để sử dụng các component Svelte phía máy khách.
Bài viết này hướng dẫn cách triển khai một background service trong ứng dụng ASP.NET Core và cách giao tiếp với background service từ một HTTP request.