2013-05-20 40 views
16

Câu hỏi này đã được hỏi ở đây:ASP.NET MVC: RedirectToAction với các thông số phải POST Action

RedirectToAction with parameter

Nhưng nếu tôi có hai hành động có cùng tên nhưng thông số khác nhau? Làm cách nào để chuyển hướng đến hành động POST Terms thay vì hành động GET Terms.

public ActionResult Terms() { 
    //get method 
} 

[HttpPost] 
public ActionResult Terms(string month, string year, int deposit = 0, int total = 0) { 
    //process POST request 
} 
+0

Bạn đang xem Chuyển hướng hành động? – PSL

+0

http://stackoverflow.com/questions/2626179/routing-to-the-actions-with-same-names-but-different-parameters –

+2

Bạn không thể chuyển hướng đến một hành động bài đăng. Một chuyển hướng luôn luôn là một nhận được, vì vậy nó chỉ đơn giản là không thể. –

Trả lời

39

Nevermind guys, thực sự tôi chỉ có thể gọi phương thức trực tiếp thay vì sử dụng RedirectToAction như vậy:

return Terms(month, year, deposit, total); 

Thay vì:

return RedirectToAction("Terms", {month, year, deposit, total}); 
+7

Đây là giải pháp. Nhưng nó có vẻ hơi giống như một hack: địa chỉ trong trình duyệt vẫn là phương pháp cũ. Bằng cách đó bạn không thể nhìn thấy điều này, bởi vì cả hai phương pháp đều có cùng tên. Nhưng vấn đề xuất hiện khi phương pháp của bạn với các đối số sẽ được gọi là "Điều khoản chi tiết". Phải làm gì để có được "TermsPost" (không phải "Điều khoản") trong thanh địa chỉ trình duyệt? – pt12lol

+0

Đồng ý với pt12lol, Nó giữ lại URL với hành động ban đầu được gọi là. –

+0

@ pt12lol: Có hai vấn đề ở đây, trình duyệt thực sự không cần biết hành động của trang MVC đến từ đâu, RedirectToAction nên dành cho quản lý lập trình nội bộ chứ không phải trình duyệt. – Arjang

3

Bạn đang đúng khi cho rằng bạn có thể gọi phương pháp trực tiếp, nhưng tôi rất khuyên bạn nên suy nghĩ lại kiến ​​trúc/triển khai của bạn.

Giao thức HTTP bao trùm ý tưởng của các động từ an toàn và không an toàn. Các động từ an toàn như GET không giả sử thay đổi trạng thái của máy chủ theo bất kỳ cách nào, trong khi các động từ không an toàn như POST, PUT làm thay đổi trạng thái. Bởi bạn GET gọi phương thức POST bạn đang vi phạm nguyên tắc này vì nó không phải là không thể nghĩ rằng POST của bạn sẽ được sửa đổi nhà nước. Ngoài ra thực hành tốt nhất ra lệnh rằng bạn nên hạn chế động từ trên tất cả các hành động của bạn vì vậy nếu phương thức 'Điều khoản' đầu tiên có nghĩa là GET, thì cũng thêm thuộc tính HttpGet vào nó để ngăn các hành động Http khác được chấp nhận bởi máy chủ cho hành động.

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