Trong ASP.NET MVC 2, tuổi thọ của một mục nhập trong TempDataDictionary
chỉ là một Yêu cầu HTTP.Thay đổi thực hiện TempData - Lý do thay đổi
Điều đó được dịch để đặt giá trị trong một yêu cầu, chuyển hướng và có quyền truy cập vào cùng một mục ở đầu bên kia của dòng. Sau này, mục nhập sẽ không còn nữa, bất kể bạn có đọc giá trị của từ điển ở cuối dòng sau hay không.
Kể từ ASP.NET MVC 3 (Tôi tin), chi tiết triển khai này đã thay đổi khá đáng kể.
Các mục nhập trong TempDataDictionary
hiện chỉ được xóa sau khi chúng đã được đọc.
MVC 4
public object this[string key]
{
get
{
object obj;
if (!this.TryGetValue(key, out obj))
return (object) null;
this._initialKeys.Remove(key);
return obj;
}
}
và
public bool TryGetValue(string key, out object value)
{
this._initialKeys.Remove(key);
return this._data.TryGetValue(key, out value);
}
MVC 2:
public object this[string key] {
get {
object value;
if (TryGetValue(key, out value)) {
return value;
}
return null;
}
và
public bool TryGetValue(string key, out object value) {
return _data.TryGetValue(key, out value);
}
Vì hầu hết mọi người dường như đặt các mục trong bộ sưu tập TempData
trong một yêu cầu và ngay lập tức đọc chúng trở lại trong yêu cầu tiếp theo ngay lập tức, chức năng này dường như giống nhau.
Trong trường hợp không phải là trường hợp muốn đọc mục nhập TempData
nếu được chuyển đến một nơi và mong muốn nó bị xóa nếu yêu cầu các tài nguyên khác và điều hướng trở lại, thay đổi này có tác động khá lớn.
Không còn là mục nhập có sẵn cho một yêu cầu http nhưng có sẵn trên nhiều yêu cầu HTTP, chỉ có sẵn cho một lần nhận trên từ điển.
Tôi muốn biết thêm về sự thay đổi này, lý do cho sự thay đổi này là gì để phục vụ cho nhiều chuyển hướng hoặc có lợi ích sâu hơn?
Thứ hai, tôi tò mò muốn biết liệu có bất kỳ thứ gì được tích hợp sẵn để chia sẻ dữ liệu yêu cầu HTTP theo cùng cách mà TempData
sử dụng để phục vụ không?
Tại sao không sao chép MVC2 'TempData' vào triển khai của riêng bạn? –
Về cơ bản chúng tôi có. –