2012-12-19 33 views
5

Tôi tò mò về cách thức hoạt động của nó. Trong MVC, bạn có thể gọi View() và truyền một mô hình như một tham số, nhưng RedirectToAction (một trong những hóa thân của nó ít nhất) có một đối tượng 'routeValues', có vẻ là đối tượng gần nhất.Chuyển mô hình sang RedirectToAction()

Nếu mô hình của bạn được chuyển vào tham số này, kiểu mô hình đó sẽ có sẵn trong phương thức hành động tiếp theo không? Hoặc là có những điều liên quan đến việc có thể ngăn chặn việc dịch chính xác trong một số trường hợp?

+1

Bạn đang nói về một _model_ thực tế hoặc một _object_ _model_? – OakNinja

+0

@ OakNinja-- Tôi không phải là 100% sự khác biệt giữa hai bạn đang đề cập đến là gì? Khi tôi nói 'mô hình' tôi có nghĩa là đối tượng được gắn thẻ là '@ model' trong Razor có sẵn cho một View và truyền cho nó từ bộ điều khiển. Tôi biết bạn có thể sử dụng TempData hoặc ViewBag để đưa mô hình vào bộ nhớ tạm thời trong khi chuyển hướng; bất cứ ai sẽ biết tại sao bạn không thể vượt qua một như một tham số khi chuyển hướng? Phương thức View() có quá tải cho phép bạn ... tự hỏi tại sao bạn không thể thực hiện tương tự trong chuyển hướng. – larryq

+1

_object_ được chuyển vào chế độ xem được nhập mạnh là loại _model_. Trong thực tế, dòng @model trong khung nhìn cho biết rằng nó sẽ được truyền qua một đối tượng có các đặc tính của một mô hình cụ thể. Làm cho nó rõ ràng hơn? Nếu không, tôi sẽ cung cấp cho bạn một câu trả lời rộng hơn như một câu trả lời! – OakNinja

Trả lời

5

Nếu bạn cần phải vượt qua trong một số-những gì đối tượng phức tạp đến một hành động sau khi chuyển hướng, bạn có thể muốn sử dụng hoặc là một phiên hoặc TempData:

Từ "What is ASP.NET MVC TempData"

ASP.NET Từ điển MVC TempData được sử dụng để chia sẻ dữ liệu giữa các hành động điều khiển . Giá trị của TempData vẫn tồn tại cho đến khi nó được đọc hoặc cho đến khi thời gian phiên làm việc của người dùng hiện ra

Theo mặc định TempData sử dụng một phiên để tồn tại các thông tin, tuy nhiên, như với hầu hết MVC, đây là một điểm mở rộng, nơi bạn có thể cắm vào một số Cookie-based provider nếu bạn thích.

+0

Đúng, tôi thường tát đối tượng vào từ điển TempData. Hành động bạn chuyển hướng đến sau đó sẽ kiểm tra TempData để xem liệu nó có mô hình có sẵn cho nó hay không. – kdawg

2

Redirect... các phương pháp khiến khách hàng quay trở lại, do đó - không, mô hình sẽ không khả dụng.

4

Bạn không thể chuyển đối tượng mô hình vào đó nhưng bạn có thể chuyển các thuộc tính riêng lẻ sẽ ánh xạ tới một mô hình trong hành động mà bạn chuyển hướng đến.

Điều đó hoạt động bằng cách tạo url để chuyển hướng đến sử dụng thuộc tính và trình kết nối mô hình trong hành động nhận.

0

Tôi nghĩ rằng đây là những gì bạn muốn:

  1. Lưu mô hình của bạn trong một TempData

     RequestModel rq = new RequestModel() 
         ....assign something to your model.. 
         TempData["request"] = rq; 
    
         return Redirect("RequestAcknowledgement"); 
    
  2. Bây giờ, tạo một quả Action for the xem bạn đang chuyển hướng tới và vượt qua TempData của bạn trở lại cho một mô hình. Sau đó trả lại mô hình cho chế độ xem.

    public ActionResult RequestAcknowledgement() 
        { 
         RequestsModel request = (RequestsModel)TempData["request"]; 
    
         return View(request); 
        } 
    
Các vấn đề liên quan