2009-03-21 24 views
9

Tôi có tình huống sau ... Trong một Chế độ xem nhất định, người dùng phải chọn giờ đầu tiên, giờ cuối cùng và ngày trong tuần. Nhưng, tôi không thể lưu thông tin này cho DB vì tôi cần phải lưu toàn bộ trang của mình và tôi cần khóa chính của bảng chính, nhưng đó không phải là vấn đề.ASP.NET MVC - Có cách nào để mô phỏng một ViewState không?

Vì vậy, mặc dù tôi không lưu các dữ liệu này vào DB, tôi đang lưu vào Phiên. Tôi được yêu cầu lưu vào cookie, nhưng có vẻ như cookie có giới hạn kích thước. Vì vậy, tôi đang tiết kiệm cho một phiên.

Buuuut, tôi cũng đã nói rằng tôi có thể lưu những thông tin (giờ và ngày trong tuần) để trang sử dụng, mô phỏng một ASP.NET ViewState ...

Có ai biết làm thế nào để làm điều này ?? Có ai biết làm thế nào để lưu tạm thời các dữ liệu này withou bằng cách sử dụng cookie hoặc phiên ??

Cảm ơn !!

+0

Tại sao hạn chế không sử dụng Phiên? Tôi sử dụng Phiên để lưu trữ kết quả của "bước" của trình hướng dẫn nhiều bước. – tvanfosson

Trả lời

20

Trường nhập ẩn sẽ không hữu ích?

<%= Html.Hidden(...) %> 

Cập nhật (serializing một đối tượng để base64):

var formatter = new BinaryFormatter(); 
var stream = new MemoryStream(); 
formatter.Serialize(stream, myObject); // myObject should be serializable. 
string result = Convert.ToBase64String(stream.ToArray()); 

Khi bạn muốn lấy nó trở lại:

var formatter = new BinaryFormatter(); 
var stream = new MemoryStream(Convert.FromBase64String(hiddenFieldValue)); 
var myObject = (MyObjectType)formatter.Deserialize(stream); 

Hãy chắc chắn rằng bạn xác nhận các dữ liệu được lưu trong lĩnh vực này khi bạn sử dụng nó như là khách hàng có thể thay đổi nó. ViewState tự động thực hiện việc này.

Side lưu ý: ASP.NET sử dụng LosFormatter thay vì BinaryFormatter serialize ViewState vì nó là hiệu quả hơn hoặc ASCII dựa serialization. Bạn cũng có thể muốn xem xét điều đó.

+0

Tôi đang sử dụng các trường ẩn cho một số thứ ... nhưng làm cách nào tôi có thể lưu danh sách các đối tượng vào một trường ẩn? – AndreMiranda

+0

Làm nhị phân tuần tự hóa đối tượng và chuyển đổi byte [] thành chuỗi base64. –

+0

Tôi có thể làm như thế nào? – AndreMiranda

0

Bạn có thể lưu một mảng javascript trên máy khách ... và sau đó truyền tải tất cả thông tin khi người dùng cuối cùng lưu.

Bạn phải làm việc nhiều hơn một chút, nhưng cuối cùng nó sẽ được đền đáp.

Tôi sử dụng rất nhiều jQuery để thực hiện những việc như vậy, có vẻ dễ dàng hơn.

+0

Juan, tôi cũng đang sử dụng jQueryin dự án. Vấn đề là dữ liệu này được lưu vào một phiên và tôi đang sử dụng jQuery Flexigrid để hiển thị chúng. Phiên của tôi đang cho ăn Flexigrid ... – AndreMiranda

0

Nếu bạn chỉ muốn lưu dữ liệu cho yêu cầu đó và yêu cầu tiếp theo tôi khuyên bạn nên sử dụng Tempdata, nếu không tôi khuyên bạn nên sử dụng câu trả lời của Mehrdad.

3

TempData ["MyData"], hãy nhớ rằng điều này sẽ chỉ kéo dài một chuyến đi khứ hồi.

Các vấn đề liên quan