2008-11-24 41 views
7

Tôi muốn chuyển hướng từ một hành động trong một bộ điều khiển đến một hành động trong bộ điều khiển thứ hai. Thông thường tôi sẽ sử dụng RedirectToAction ("actionName", "controllerName", các đối tượng); Phương pháp tôi muốn chuyển hướng đến có hai quá tải:Chuyển hướng đến hành động trong bộ điều khiển khác

  • Một cho HttpVerbs.Get được sử dụng để trực tiếp liên kết
  • Một cho HttpVerbs.Post chấp nhận các loại tài liệu tham khảo mà có được đầy qua modelbinding

Khi tôi thực hiện chuyển hướng bằng phương thức RedirectToAction, tôi được chuyển hướng đến phương thức GET theo mặc định, khóa học không phù hợp với tham số của tôi.
Làm cách nào để đảm bảo rằng nó chuyển hướng đến tình trạng quá tải của hành động chính xác?

--EDIT--
Theo yêu cầu một số chi tiết cụ thể hơn:
Hành động Tôi muốn chuyển hướng đến lấp đầy ViewData dựa trên các thông số và sau đó gọi là cái nhìn đúng đắn.

public ActionResult OverView(SearchBag searchBag, IngredientBag ingredientBag) { 

Nó có một phiên bản thứ hai cho Gets để nó có thể hoạt động bằng cách GET quá:

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult OverView(int colorId, string paintCode, string name, int formulaId) { 
    return OverView(new SearchBag() 
     { ColorId = colorId, PaintCode = paintCode, ColorName = name, FormulaId = formulaId } 
      , formulaViewData.IngredientBag); 
} 

Người Tôi đang gọi hiện đang ở một bộ điều khiển khác nhau. Nó thực hiện một số tính toán trước, tìm nạp thông tin cần thiết và sau đó thực hiện chính xác điều tương tự như các hành động trước đó. Tôi có thể tái tạo mã từ hành động đầu tiên, nhưng tôi chỉ muốn gọi hành động đó.

[AcceptVerbs(HttpVerbs.Post)] 
public RedirectToRouteResult ReCalculate(SearchBag searchBag, IngredientBag ingredientBag) { 

Tôi có thể tạo phiên bản cục bộ tạm thời của bộ điều khiển tiếp theo đó, nhưng tôi nhận thấy nó không có đúng HTTPContext và không nhấn phương thức khởi tạo.

+0

Bạn có thể đặt nhiều động từ vào một hành động như thế này [AcceptVerbs (HttpVerbs.Post | HttpVerbs.Get)] –

+0

Vì vậy, bạn đang cố gắng RedirectToAction từ hành động ReCalculate đến hành động OverView? –

+0

có. Và kể từ khi tôi lấy tất cả các đối tượng của tôi và tính toán lại chúng trong ReCalculate, tôi không muốn phải làm điều đó một lần nữa trong hành động Tổng quan của tôi –

Trả lời

3

Bạn không thể sử dụng RedirectToAction (hoặc bất kỳ thứ gì khác) để khiến trình duyệt chuyển hướng bằng HTTP POST. Bạn có thể hack nó với một số JavaScript nhưng nó sẽ là xấu xí.

Nếu bạn có thể cung cấp thêm một số chi tiết về hành động mục tiêu mà bạn muốn chuyển hướng người dùng đến chúng tôi, chúng tôi có thể cung cấp câu trả lời tốt hơn cho bạn. Vui lòng cập nhật câu hỏi của bạn với chữ ký của hành động mục tiêu và chi tiết về những gì bạn muốn cung cấp làm giá trị tham số để mọi người có thể cung cấp hướng dẫn hợp lý.

Tôi đoán những gì bạn muốn làm là lưu trữ một số dữ liệu trong TempData, gọi RedirectToAction, tải từ TempData trong bộ điều khiển/hành động và quá trình đích.

Để biết thêm thông tin về TempData, hãy xem các câu hỏi sau; http://www.google.com/search?q=tempdata+site%3Astackoverflow.com

+0

Hành động tôi muốn chuyển hướng để lấp đầy chế độ xem của tôi với các contenet cần thiết (các mục trong hộp danh sách và như vậy) và sau đó gọi chế độ xem. Hành động thứ hai (cái tôi đang gọi bây giờ) trước tiên thực hiện một số phép tính cụ thể và sau đó thực hiện những việc giống hệt như lần đầu tiên. Tôi sẽ cập nhật OP của mình –

2

Vì bạn đã điền đối tượng của mình, bạn có thể xem xét trả lại cùng Chế độ xem từ hành động đầu tiên thay vì chuyển hướng.

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