2010-02-24 22 views
32

tôi có một cái nhìn List.aspx được ràng buộc với lớp Kindergarten.NET MVC: Gọi RedirectToAction truyền một mô hình?

Trong bộ điều khiển:

public ActionResult List(int Id) 
{ 
    Kindergarten k = (from k1 in _kindergartensRepository.Kindergartens 
        where k1.Id == Id 
        select k1).First(); 

    return View(k); 
} 

đó làm việc.

Nhưng điều này không

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Add(...) 
{ 
    //... 
    Kindergarten k = ... 
    return RedirectToAction("List", k); 
} 

Làm thế nào tôi nên chuyển hướng đến xem danh sách, đi qua k làm người mẫu?

Cảm ơn!

Trả lời

27

Tôi nghĩ rằng bạn chỉ cần gọi xem như

trở RedirectToAction ("List", mới {id});

với id bạn cần đưa vào Mẫu giáo.

18

Tôi không chắc chắn bạn muốn gọi RedirectToAction vì điều đó sẽ chỉ khiến k được đặt lại.

Tôi nghĩ bạn muốn gọi số View và chuyển tên của chế độ xem và mô hình của bạn.

return View("List", k); 
+0

Bạn nói đúng (_ _;) Cảm ơn! – Aximili

+0

Ồ, nhưng nếu xem trên bộ điều khiển khác thì sao? – Aximili

+0

Khi tìm kiếm một View, nó sẽ kiểm tra thư mục View \ Controller \, nếu nó không tìm thấy nó ở đó, nó sẽ kiểm tra thư mục Shared. Nếu bạn muốn truy cập chế độ xem trên nhiều bộ điều khiển, hãy đặt nó trong thư mục Được chia sẻ. – Brandon

55

Tôi không tin ModelBinding tồn tại khi sử dụng RedirectToAction. Tuy nhiên, các tùy chọn tốt nhất của bạn là sử dụng bộ sưu tập TempData để lưu trữ đối tượng và lấy nó trong hành động sau.

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Add(...) 
{ 
    //... 
    Kindergarten k = ... 
    TempData["KG"] = k; 
    return RedirectToAction("List"); 
} 

Trong Danh sách hành động của bạn

public ActionResult List() 
{ 

    Kindergarten k = (Kindergarten)TempData["KG"]; 
    // I assume you need to do some stuff here with the object, 
    // otherwise this action would be a waste as you can do this in the Add Action 
    return View(k); 
} 

Lưu ý: TempData bộ sưu tập chỉ giữ đối tượng cho một chuyển hướng tiếp theo duy nhất. Khi bạn thực hiện bất kỳ chuyển hướng nào từ Thêm, TempData ["KG"] sẽ không có giá trị (trừ khi bạn repopulate nó)

+1

bạn không nên sử dụng MVC như thế này. – eaglestorm

+0

Có gì sai khi sử dụng MVC như thế này? – Omar

+2

Nó ngụ ý rằng có nhiều logic trong hành động của bạn. Logic nghiệp vụ phải nằm trong một lớp (dịch vụ) riêng biệt và hành động của bạn nên gọi logic này và sau đó chuyển hướng đến chế độ xem thích hợp. Bạn không nên vào vị trí mà bạn cần thực hiện ở trên nếu ứng dụng của bạn được thiết kế tốt. – eaglestorm

1

thay vào đó, bạn có thể muốn sử dụng return View("List", Id) thay vào đó, nhưng vấn đề bạn đang gặp là bạn ' quay lại k, mô hình của bạn, với phương thức chấp nhận tham số int.

Hãy suy nghĩ về số RedirectToAction làm cuộc gọi phương thức.

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