ASP.NET MVC 2'de OnActionExecuting çalıştırdığım bir eylem filtresine sahibim. Temel olarak, eylem filtresinin verilerinizi sterilize etmesini ve geçerli modeli değiştirmesini (sonraki eylem filtrelerine geçirilecek olan) ve sanitized model ile de benim eylem yöntemim). Bu mümkün mü ve bu kötü bir fikir mi - eğer öyleyse? ActionFilter'da bir modeli değiştirme
JP, şimdiden teşekkürlercevap
Eğer modelleri ile uğraşmak gerekir, büyük olasılıkla (tek Kontrolör kapsamında daha uğraşan olacağız tüm Kontrolörler aynı modeli türlerini kullanmadıkça ?). Alternatif bir yaklaşım, Kontrolörlerin kendileri için OnActionExecuting()
ve OnActionExecuted()
yöntemlerini geçersiz kılmak olacaktır. Bu, iş mantığınızı denetleyici kapsamı içinde tutmanıza olanak tanır.
Genel olarak ActionFilters, çapraz-kesme endişeleri için kullanılır - uygulamada nerede olduklarına bakılmaksızın, birçok eylem yöntemi için çalıştırmak istediğiniz bir şey. Dolayısıyla, modelinizin sanitizasyon mantığı pek çok kontrolör ve eylem için geçerli değilse veya çok genel değilse (ki bu belki de sizin yaklaşımınız muhtemelen iyidir), bunu filtrelerden ve kontrol cihazlarınızdan çıkarmak isteyebilirsiniz. Eğer geniş bir şekilde uygulanabilecek bir şeyse, bir ActionFilter iyi.
Kesinlikle sizin noktanızı görüyorum ama sanitizasyon çok fazla bir CCC ve kontrolörler ve eylem yöntemleri arasında kullanılacaktır. –
Burada, MVC v1 için var bu v2 içinde değişmez umut: Eğer OnActionExecuting bunu yapmak istiyorum neden
var view = filterContext.Result as ViewResultBase;
if (view != null)
view.ViewData.Model ...
görmüyorum, ama mutlaka sen eğer, orada bunu, ve OnActionExecuted'in ortaya çıkan Modeli düzeltmek zorunda olduğu bazı bayrağı (özel alan) ayarlayın. Ancak, ikincisi kullanmak zorunda kalacaksınız, ancak .Result'u atamanız dışında - bu durumda eyleminiz hiç çağrılmayacak ve atanan sonuç kullanılacaktır.
Model OnActionExecuting (örneğin, eylemi yürütür önce) erişmeye çalışıyorum, bu durumda Model her zaman null döndürür .... –
Daha açık olmalıydım - neden yapmak zorundayım (gerekir) OnActionExecuting olduğunu Bu yüzden hala ValidateInput filtresini çalıştırabilirim (ve bunu kapatmak zorunda kalmazsınız!). Özelliklerim bu noktada HTML içeriyorsa, tehlikeli olarak işaretlenecek ve filtre başarısız olacaktır (daha iyi bir terim için). Bu ikinci filtreye ulaşmadan önce verilerin güncellenmesi gerekiyor, bu nedenle OnActionExecuted çok geç ... –
BTW, MVC 3 & 4 için:
filterContext.Controller.ViewData.Model
- 1. modeli
- 2. Codeigniter'da bir modeli devralma
- 3. UWP 3D modeli bir
- 4. programlı bir Ecore modeli
- 5. YII'de dışarı modeli modeli ile bir metin alanı nasıl eklenir?
- 6. Bir ado.net varlık veri modeli
- 7. Bir tasarım modeli için sor
- 8. Bir modeli yok edin backback.io
- 9. JQuery bir modeli nasıl kullanabilir?
- 10. Harici bir başlık değiştirme
- 11. Değiştirme?
- 12. değiştirme
- 13. oluşturma modeli
- 14. System.Net.Sockets.Socket.AcceptAsync modeli
- 15. dil modeli
- 16. Modeli parametreleri
- 17. Yii2 modeli
- 18. iframe'de yön değiştirme yönünü değiştirme
- 19. Parçaları değiştirme ve yön değiştirme
- 20. Raylar modeli bir modele veya başka bir
- 21. bir Django modeli, bir metaclass çatışmayı
- 22. Belirli bir özelliğin değerini değiştirme
- 23. değiştirme değeri, bir seçenek seçilmiş
- 24. ListView öğesinin bir öğesini değiştirme
- 25. Yararsız bir koşulda değişken değiştirme
- 26. Bir öğenin anahtar adını değiştirme
- 27. Veritabanındaki bir tablonun sahipliğini değiştirme
- 28. Bir lambda ifadesinde parametreleri değiştirme
- 29. Bir Nesnenin Türünü JavaScript'te Değiştirme
- 30. Veritabanını büyük bir veritabanında değiştirme
kötü tasarım kokuyor. –
Filip, eğer eleştireceksen lütfen yapıcı ol. Bana neden kötü bir tasarım olduğunu söyle, iyi alternatifler olarak ne gördüğünü söyle ... aksi takdirde yorumunuz benim için ve bu yazıyı okuyan başka herkes için işe yaramıyor ... –