2010-11-18 13 views
1

JQuery'den AJAX çağrıları yapmak için 'WebMethod' özniteliğini kullanan bir ASP .NET Web Formları uygulamasına sahibim. Uygulamayı lokalize çalışıyorum uğraşıyorum bu yüzden son zamanlarda test amaçlı şuna benzer bir web yöntemini yarattı:Geçerli iş parçacığının CultureInfo, ASP .NET'te 'WebMethod' çağrısında bir DateTime parametresi ayrıştırılırken neden kullanılmıyor?

[WebMethod] 
public static string HandleDate(DateTime dateValue) 
{ 
    return dateValue.ToString("f"); 
} 
bu yöntemin noktası doğrulanmasıdır

ben düzgün web CultureInfo ayarlarsanız yöntem, sağlanan kültürü tarih formatlama kurallarını kullanarak doğru şekilde ayrıştırır. Maalesef bu kod asla ulaşılamıyor. Bunun yerine, bu WebMethods'ın çağrılmasına izin veren yardımcı sınıflar tarafından yükseltilmekte bir hata görüyorum.

Geçerli parçanın 'CurrentCulture' ve 'CurrentUICulture' özelliklerini 'BeginRequest' etkinliğinde 'pt-BR' (Brezilya Portekizcesi) olarak ayarlayan bir HttpModule'ım var.

İstemci tarafı, '18/10/2010 'olarak dateValue parametresini sağlayan bu' HandleDate 'web yöntemine jQuery AJAX çağrısı var. 'Pt-BR' kültüründe bu, 18 Ekim 2010'a kadar değerlendirilmelidir (gün/ay/yıl tarih formatı).

Bunu çalıştırdığımda, 'System.Web.Script.Serialization.ObjectConverter', '18/11/2010 'DateTime için geçerli bir değer olmadığını belirten bir hata olduğunu belirten bir hata alıyorum. Hataya dahil yığın izleme, bunun, dönüştürme sırasında uygulanması gereken kültürü temsil eden bir CultureInfo nesnesine ek olarak dönüştürülecek nesneyi kabul eden 'System.ComponentModel.DateTimeCoverter.ConvertFrom' yöntemi tarafından atıldığını gösterir.

Reflector'u ateşledim ve 'ObjectConverter' sorunun olduğunu düşündüğüm CultureInfo.InvariantCulture örneğini kullanarak 'DateTimeConverter' öğesini çağırıyor.

Bu mantığı InvariantCulture yerine geçerli iş parçacığına ekli CultureInfo kullanmak için nasıl zorlayabilirim?

+0

Sanırım '18/10/2010'u bir DateTime'a dönüştürmeye çalışıyorum, böylece yönteme aktarılabilir ve kodunuzla ilgisi yoktur "dateValue.ToString (" f ")" – Greg

+1

Yah Yöntemin içindeki kodlara asla ulaşılamaz. Bu kesinlikle tarihin ayrıştırılmasını yapıyor, ama nedenini bilmek istiyorum. Soruyu biraz açıklığa kavuşturacağım. –

cevap

1

Parametre türünü string olarak değiştirmenizi ve ardından DateTime.Parse veya TryParse'u kullanarak ayrıştırmanızı öneririz.

+0

Tüm söylediğim ve yaptım muhtemelen bu ne yapacağım. Invariant kültürüyle tarihleri ​​ayrıştırmak ve nedenini bilmek istemek için biraz tuhaf davranışlar olduğunu düşündüm. Bunu daha fazla düşündüğümde, Invariant kültürünü kullanmanın Microsoft tarafından "tasarımla" alınmış bir karar olabileceğini düşünüyorum. –

+0

Bu altyapının SOAP tabanlı web hizmetleri için oluşturulduğunu unutmayın. Bu tür hizmetlerde tarih/saat dizgileri için uluslararası bir standart var, bu nedenle tarihlerin nasıl ayrıştırılacağı konusunda bir soru yok. –

+0

Yah, Katılıyorum. Bence bu, tasarım gereğidir ve AJAX çağrılarına (yani, ISO formatlarını kullanarak ve 'ParseExact' kullanarak tarih dizelerini nasıl sağladığımı etkileyecektir.) Bu cevabı kabul ediyorum. Teşekkürler! –

İlgili konular