0236.2240.741
msita.vietnam@gmail.com
Học lập trình Đà Nẵng để được đi tham quan nơi làm việc trong tương lai
6 Jul 2018

Cách sử dụng TempData trong ASP.NET Core MVC

Cách sử dụng TempData trong ASP.NET Core MVC

Tương tự ViewData và ViewBag, TempData cũng dùng để truyền dữ liệu ra view. Tuy nhiên sẽ hơi khác một chút, đó là TempData sẽ tồn tại cho đến khi nó được đọc. Tức là ViewBag và ViewData chỉ hiển thị được dữ liệu ngay tại trang người dùng truy cập, còn TempData có thể lưu lại và hiển thị ở một trang sau đó và nó chỉ biến mất khi người dùng đã “đọc” nó.TempData

TempData thường được ứng dụng để hiển thị các thông báo thành công, thất bại ở trang kế tiếp.

 

Ví dụ với ứng dụng Quản lý Book có 2 trang Danh sách Book và Tạo mới Book.

Khi người dùng Tạo mới Book xong sẽ được chuyển qua trang Danh sách Book kèm một thông báo tạo book thành công. Lúc này chúng ta sẽ không thể dùng ViewBag hay ViewData để lưu thông báo được vì thông báo nằm ở trang khác (Action khác). Chúng ta sẽ dùng TempData để lưu thông báo ở trang Tạo mới Book và hiển thị ra ở trang Quản lý Book:

public class BookController : Controller
{
// Trang Tạo mới Book
public IActionResult Create()
{
// Logic tạo mới Book ...
// Lưu message vào TempData
TempData["StatusMessage"] = "Create book successfully";
// Điều hướng sang trang Danh sách Book
return RedirectToAction(nameof(Index));
}
// Trang Danh sách Book
public IActionResult Index() 
{
// Logic hiển thị Book ...
// Render View
return View();
}
}

 

Ngoài View của trang Danh sách Book chỉ việc hiển thị message:

@TempData["StatusMessage"]

 

Một cách khác đó là tạo một thuộc tính cho Controller và gán cho nó Attribute TempData sau đó sử dụng thuộc tính đó để lưu message:

public class BookController : Controller
{
[TempData]
public string StatusMessage { get; set; }
...
}

 

TempData Provider

Có 2 loại TempData Provider là cookie-based (lưu dữ liệu trong Cookie) và session-base (lưu dữ liệu trong Session). Việc chọn loại Provider nào là tùy mục đích sử dụng:

  • Trong ứng dụng có cần dùng đến Session state hay không, nếu không thì nên dùng cookie-based provider.
  • Nếu dữ liệu lưu trong TempData lớn thì nên dùng session-based provider vì Cookie có thể bị hạn chế dung lượng bởi trình duyệt và sẽ làm tăng thêm chi phí request (cost).

Mặc định ASP.NET Core 2 sử dụng cookie-base provider, để chuyển qua dùng session-base provider thì ta sẽ phải cấu hình trong file Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddSessionStateTempDataProvider();
services.AddSession();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSession();
app.UseMvcWithDefaultRoute();
}
Bạn muốn học lập trình hãy liên hệ ngay với Mỹ Vân để được nhận ưu đãi từ học viện nhé
Học lập trình tại Đà Nẵng
Học lập trình tại Đà Nẵng 0935029202
Số tài khoản : 56110000942174 BIDV Chi nhánh Đà Nẵng
HUYNH THI MY VAN
Khóa học Lập trình Python