Şu anda, istek için doğru kültür ayarlarını belirlemek için rota değerlerini, çerezleri ve tarayıcı dilleri üstbilgisini kontrol eden GlobalizationFilter
adlı küresel bir filtrem var:MVC3 küreselleşme: model bağlamadan önce global filtreye ihtiyaç var
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// determine cultureInfo
Thread.CurrentThread.CurrentCulture = cultureInfo;
Thread.CurrentThread.CurrentUICulture = cultureInfo;
}
Her şey çalışıyor, ancak model bağlama işlemi gerçekleşiyor gibi görünüyor küresel filtrelerden önce ve böylece model bağlayıcı, kültür ayarlarını dikkate almaz.
Bu, çift değerlerin, DateTime
değerlerinin yorumlanmasında sorunlara yol açar.
Kültür algılama kodunu diğer konumlara taşıyabilirdim ancak seçeneklerimden hiçbirini beğenmedim:
Uygulamanın
BeginRequest
etkinliği. Bu noktada, yönlendirme gerçekleşmedi, bu yüzden URL'den/en-US/
kültür belirtecini manuel olarak elemeliyim. Bu kabul edilemez.Denetleyici
Initialize()
yöntemi. Bu, tüm denetleyicilerim için bir temel sınıf yazmamı ve varolan denetleyicileri ondan devralmamı zorlaştırır. Bundan hoşlanmıyorum, ama daha iyi bir şey olmazsa bu çözümü tercih ederim.
İdeal olarak, "yönlendirme tamamlandı" ve "model bağlama başlar" olayları arasında kodumu enjekte etmenin bir yolunu bulmak istiyorum, ancak bu konuda MSDN/Google'da hiçbir şey bulamadım.
Ya da farkında olmadığım MVC3 küreselleşmesini ele almanın başka bir yolu var mı?
Herhangi bir katkı için şimdiden teşekkür ederiz.
kaydetmek sonra
BindModel
ve çağırmadan önce kültür ayarlamak için sınıfını kullanır
DefaultModelBinder
türemiş birModelBinder
oluşturmak nihayetinde bir özel model bağlayıcı, en iyi yol gibi görünüyor. Teşekkürler – ZrutyAncak, bir model ciltçi içinde istek çapında kültür ayarlama biraz karşı sezgisel görünüyor .. – Zruty
kültürü elden önce saklamak, kültürü ayarlamak ve modeli bağlamak ve daha sonra özgün kültürü geri yükleyebilirsiniz. Özel bir model ciltleyici, MVC mimarisinde tek bir dikiştir, Tek Sorumluluk İlkesi argümanlarından rahatsızlık duyuyorsanız bunu başka yerlerde de uygulayabilirsiniz. Örneğin, kültürü belirleyen kendi rota işleyicinizi tanımlayabilirsiniz. Sürüş ilkelerinize bağlı. Test edilebilirlik önemliyse, test etmek zor olacak bir yere koymayın ('Application_BeginRequest' gibi) :) –