ASP.NET - MVC - TempData

TempData trong MVC ASP.NET

TempData trong ASP.NET MVC có thể được sử dụng để lưu trữ dữ liệu tạm thời có thể được sử dụng trong yêu cầu tiếp theo. TempData sẽ bị xóa sau khi hoàn thành một yêu cầu tiếp theo.

TempData rất hữu ích khi bạn muốn chuyển dữ liệu từ một phương thức hành động này sang một phương thức hành động khác của cùng một controller khác cũng như chuyển hướng. Đây là loại từ điển có nguồn gốc từ TempDataDipedia.

Bạn có thể thêm một cặp key-value trong TempData như trong ví dụ dưới đây.

Ví dụ: TempData

public class HomeController : Controller
{
    // GET: Student
    public HomeController()
    {

    }
    public ActionResult Index()
    {
        TempData["name"] = "Test data";
        TempData["age"] = 30;

        return View();
    }

    public ActionResult About()
    {
        string userName;
        int userAge;
        
        if(TempData.ContainsKey("name"))
            userName = TempData["name"].ToString();
    
        if(TempData.ContainsKey("age"))
            userAge = int.Parse(TempData["age"].ToString());
    
        // do something with userName or userAge here 

        return View();
    }
}

Trong ví dụ trên, chúng ta đã thêm dữ liệu vào TempData và truy cập cùng một dữ liệu bằng một khóa bên trong phương thức hành động khác. Xin lưu ý rằng chúng tôi đã chuyển đổi các giá trị thành loại thích hợp.

Hình dưới đây minh họa TempData.

Như bạn có thể thấy trong ví dụ trên, chúng ta thêm dữ liệu trong TempData trong yêu cầu đầu tiên và trong yêu cầu thứ hai , chúng ta truy cập dữ liệu từ TempData mà chúng tôi đã lưu trữ trong yêu cầu đầu tiên. Tuy nhiên, bạn không thể nhận được cùng một dữ liệu trong yêu cầu thứ ba vì TempData sẽ bị xóa sau yêu cầu thứ hai.

TempData sử dụng phiên giao dịch để lưu trữ dữ liệu. Vì vậy, dữ liệu phải được tuần tự hóa. Vì vậy, dữ liệu phải được tuần tự hóa nếu bạn quyết định chuyển khỏi mặc định Session-State Mode, và sử dụng State Server Mode hoặc SQL Server Mode.

Gọi TempData.Keep() để giữ lại các giá trị TempData trong yêu cầu thứ ba tiếp theo.

Ví dụ TempData.Keep()

public class HomeController : Controller
{
    public HomeController()
    {

    }

    public ActionResult Index()
    {
        TempData["myData"] = "Test data";
        return View();
    }

    public ActionResult About()
    {
        string data;
        
        if(TempData["myData"] != null)
            data = TempData["myData"] as string;
        
        TempData.Keep();
        
        return View();
    }

    public ActionResult Contact()
    {
        string data;
        
        if(TempData["myData"] != null)
            data = TempData["myData"] as string;
            
        return View();
    }
}

 

 Những điểm cần nhớ :

  1. TempData có thể được sử dụng để lưu trữ dữ liệu giữa hai yêu cầu liên tiếp. Giá trị TempData sẽ được giữ lại trong quá trình chuyển hướng.
  2. TemData là một kiểu TempDataDictionary.
  3. TempData sử dụng  Session để lưu trữ dữ liệu.
  4. Giá trị của TempData phải được ép kiểu trước khi sử dụng.Kiểm tra giá trị null để tránh lỗi thực thi.
  5. TempData chỉ có thể được sử dụng để lưu trữ các thông báo một lần như thông báo lỗi, thông báo xác thực.
  6. Gọi TempData.Keep() để giữ lại các giá trị TempData trong yêu cầu thứ ba tiếp theo.