Tôi đang làm việc trên ứng dụng web ASP.NET MVC 3, nơi tôi sử dụng TempData để lưu trữ một đối tượng mô hình, trong trường hợp người dùng không đăng nhập.TempData Không được xóa
Đây là luồng:
- Sử dụng biểu mẫu gửi.
- Mã (bộ lọc hành động đặc biệt) thêm mô hình vào TempData, chuyển hướng đến trang đăng nhập.
- tài chuyển hướng trở lại GET hành động, mà đọc TempData và gọi POST hành động trực tiếp
Sau bước 3, tôi sẽ phải suy nghĩ TempData sẽ được xóa?
Dưới đây là các mã:
[HttpGet]
public ActionResult Foo()
{
var prefilled = TempData["xxxx"] as MyModel;
if (prefilled != null)
{
return Foo(prefilled);
}
}
[HttpPost]
[StatefulAuthorize] // handles the tempdata storage and redirect to logon page
public ActionResult Foo(MyModel model)
{
// saves to db.. etc
}
tôi thấy this article trong đó nêu:
- Items chỉ được lấy ra từ TempData ở phần cuối của một yêu cầu nếu họ đã được gắn thẻ để loại bỏ.
- Các mục chỉ được gắn thẻ để xóa khi chúng được đọc.
- Các mục có thể không được gắn thẻ bằng cách gọi TempData.Keep (khóa).
- Chuyển hướngResult và RedirectToRouteResult luôn gọi TempData.Keep().
Bằng cách đọc nó với TempData["xxx"]
không phải là "đã đọc" và do đó chúng phải được gắn thẻ để xóa?
Và điều cuối cùng liên quan đến tôi một chút - vì tôi đang thực hiện Chuyển hướng sau POST (P-R-G). Nhưng điều này không thể tránh được.
Có cách nào tôi có thể nói "bỏ qua mục này" không. TempData.Remove? Hay tôi đang làm điều này sai?
Bạn cần thực hiện chuyển hướng đầy đủ và không trả lại phương thức hành động thứ hai. Đó là lý do tại sao nó không hoạt động. – Buildstarted
@BuildStarted - nhưng phương thức POST * thực hiện * chuyển hướng sau khi hoàn tất. Bạn không thể chuyển hướng đến phương thức POST, đó không phải là GET? – RPM1984
Vâng, từ những gì tôi đọc dựa trên dữ liệu hạn chế là bạn đang thực hiện nhận và chuyển hướng * trong mã * tới bài đăng - rằng 'StatefulAuthorize' sẽ không được gọi. – Buildstarted