2009-04-17 40 views
21

Tôi muốn xây dựng một đối tượng theo các bước khác nhau trong ứng dụng asp.net mvc, mỗi bước là một trang khác. Loại điều bạn muốn lưu trữ trong Phiên trong ứng dụng Web.Forms nhanh.Asp.Net MVC và Session

Đọc về điều đó, Phiên dường như không phải là một điều gì đó rất asp.net MVC'ish. Tuy nhiên tôi thực sự không thể nghĩ ra các lựa chọn thay thế khác cho tình huống này vì TempData và ViewData dường như không phù hợp với nhau, vì vậy có thể tôi đã sai.

Tất nhiên tôi có thể đặt 4 bước trong một trang và hiển thị/ẩn, nhưng đó không phải là vấn đề của tôi. Tôi muốn nghe ý kiến ​​của bạn về Phiên trong MVC, nếu đó là một sản phẩm tốt cho loại vấn đề đa bước này hoặc bạn có xu hướng làm theo cách khác.

Điều này rất giống câu hỏi Session variables in ASP.NET MVC, ngoại trừ việc tôi không tìm cách truy cập Phiên, nhưng nếu đó là cách tốt nhất để giải quyết vấn đề như vậy hoặc có điều gì đó tốt hơn tôi bị thiếu trong Asp.Net MVC .

Cảm ơn trước

Trả lời

20

Không có gì là un-MVC về Phiên, đó là một phần quan trọng của web và hầu hết các trang web sử dụng nó theo một cách nào đó. Bạn thực sự có hai lựa chọn chính. Lưu trữ đối tượng trong cơ sở dữ liệu giữa các trang (có nghĩa là lưu một đối tượng không đầy đủ) hoặc đặt nó trong phiên. Cả hai đều có mặt hại và mặt lợi.

Trong phiên bạn không phải lưu một phần đối tượng vào cơ sở dữ liệu, nhưng nếu người dùng rời khỏi hoặc phiên hết thời gian bạn mất tất cả thông tin đó. Nó cũng có thể dẫn đến một bộ nhớ lớn hơn cho mỗi người dùng và khi bạn nhận được để mở rộng nó gây ra một số vấn đề khác. (tất cả đều có thể được giải quyết bằng cách sử dụng phiên dính trên bộ cân bằng tải hoặc cửa hàng phiên trung tâm).

Cách cơ sở dữ liệu tốt hơn theo nhiều cách nhưng thường bạn không muốn lưu đối tượng không đầy đủ vào cơ sở dữ liệu, một thỏa hiệp là tạo một bảng khác và lưu đối tượng được tuần tự hóa vào bảng đó. Nó không đi qua các bảng thực của bạn và do đó bạn không phải thỏa hiệp về các ràng buộc cơ sở dữ liệu của bạn. (bạn cũng có thể lưu trữ dữ liệu phiên trong cơ sở dữ liệu mà về cơ bản là làm tương tự)

Cuối cuộc gọi phán đoán giữa hai cách, tôi đã sử dụng cả hai năm qua.

+0

Tôi không đồng ý với bạn, nhưng lưu ý rằng phiên dính hoặc trạng thái phiên trung tâm là cả tin xấu đối với khả năng mở rộng. Nó vẫn có thể quy mô tất nhiên, nhưng nó làm cho cuộc sống khó khăn. Nếu trạng thái phiên có thể tránh được thì câu chuyện khả năng mở rộng của bạn đẹp hơn nhiều - có lẽ đây là lý do tại sao OP lại cảnh giác với nó? –

+4

Làm thế nào để bạn xác định cứng? Tôi đã thu nhỏ một số hệ thống bằng phương pháp này và không gặp phải vấn đề gì. Rất khó để tránh hoàn toàn phiên, đặc biệt khi bạn đăng nhập vào người dùng, v.v. –

1

Bạn đã thử <%= Html.HiddenField(...) %>?

+0

Bạn có nghĩa là trình trợ giúp html cho "" không? Với điều đó tôi chỉ có thể lưu trữ các giá trị đơn giản, tôi cần lưu trữ và điền một đối tượng phức tạp – antonioh

+0

http://stackoverflow.com/questions/669492/asp-net-mvc-is-there-a-way-to-simulate-a -viewstate/669495 # 669495 –

+0

Cảm ơn, nhưng đó không thực sự là những gì tôi đang tìm kiếm. Tôi đang tìm các thực hành tốt tiêu chuẩn. Đó là một ý tưởng tốt mặc dù. – antonioh

2

Bạn có thể truyền qua lại giữa Chế độ xem với TempData ... nhưng bạn phải duy trì truyền qua các chế độ xem tiếp theo. Nó có nghĩa là để được tiêu thụ bởi yêu cầu tiếp theo, nhưng đó không phải để nói rằng bạn không thể truyền dữ liệu tạm thời cho yêu cầu tiếp theo mà cũng đặt cùng một dữ liệu trở lại vào dữ liệu tạm thời.