2013-05-20 20 views
16

POST Bu soru burada istendi:ASP.NET MVC: parametrelerle RedirectToAction Eylem

RedirectToAction with parameter

Ama benim aynı adı fakat farklı parametrelerle iki eylem varsa? GET Terms eylemi yerine POST Terms eylemine nasıl yönlendiririm.

public ActionResult Terms() { 
    //get method 
} 

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

RedirectToAction'a bakıyor musunuz? – PSL

+0

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

+2

Bir harekete geçirme eylemine yönlendiremezsiniz. Bir yönlendirme her zaman bir kazançtır, bu yüzden mümkün değildir. –

cevap

39

Nevermind adamlar, aslında sadece yerine şöyle RedirectToAction kullanmanın doğrudan yöntemini diyebiliriz:

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

Bu çözümdür. Ama biraz kesmek gibi görünüyor: tarayıcıda adres hala eski bir yöntem. Bu şekilde göremezsiniz, çünkü her iki yöntem de aynı isimdir. Ancak sorun, argümanlarla yönteminiz "TermsPost" olarak adlandırıldığında ortaya çıkar. Tarayıcı adres çubuğuna "TermsPost" ("Terimler" değil) almak için ne yapmalı? – pt12lol

+0

pt12lol ile katılıyorum, İlk olarak adlandırılan eylemle URL'yi korur. –

+0

@ pt12lol: Burada iki sorun var, tarayıcının gerçekten hangi MVC eyleminin geldiğini bilmesi gerekmiyor, RedirectToAction iç programlama yönetimi için tarayıcı değil. – Arjang

3

Sen doğru çağırabilir olduğunu: Yerine

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

doğrudan yöntem, ancak mimarinizi/uygulamanızı yeniden düşünmenizi öneririm.

HTTP Protokolü güvenli ve güvenli olmayan fiiller fikrini benimsemektedir. GET gibi güvenli fiiller, sunucunun durumunu herhangi bir şekilde değiştirmez, POST, PUT gibi Güvenli olmayan fiiller ise durumu değiştirir. POST yöntemini çağırmak GET size bu ilkeyi ihlal ediyorsunuz çünkü POST durumunuzu değiştirecek durumda değilsiniz.

Ayrıca, en iyi uygulama tüm eylemlerinizde fiilleri sınırlandırmanız gerektiğini belirtir; böylece ilk 'Şartlar' yöntemi bir GET olarak ifade edilirse, diğer Http eylemlerinin tarafından kabul edilmesini önlemek için HttpGet özniteliğini de ekleyin. eylem için sunucu.