لماذا لا يتم استخدام CultureNfo للمعلومات الحالية عند تحليل معلمة DateTime على مكالمة "WebMethod" في ASP .NET؟

StackOverflow https://stackoverflow.com/questions/4217511

  •  26-09-2019
  •  | 
  •  

سؤال

لديّ تطبيق نماذج الويب ASP .NET يستخدم سمة "WebMethod" لإجراء مكالمات Ajax من JQuery. أنا أتعامل مع محاولة توطين التطبيق ، لذا قمت مؤخرًا بإنشاء طريقة ويب تبدو مثل هذا لأغراض الاختبار:

[WebMethod]
public static string HandleDate(DateTime dateValue)
{
    return dateValue.ToString("f");
}

الهدف من هذه الطريقة هو التحقق من أنه إذا قمت بتعيين CultureInfo بشكل صحيح ، فسيقوم طريقة الويب بتحليل التاريخ المقدم بشكل صحيح باستخدام قواعد تنسيق التاريخ لتلك الثقافة. لسوء الحظ ، لم يتم الوصول إلى هذا الرمز. بدلاً من ذلك ، أرى خطأ في رفعه من قبل فئات المساعد التي تسمح لاستدعاء هذه الوصي.

لديّ httpmodule تقوم بتعيين "الخصائص الحالية للزراعة" و "الزراعة الحالية" للخيط الحالي إلى "PT-BR" (البرتغالية البرازيلية) في حدث "BeginRequest".

من جانب العميل ، لديّ مكالمة jQuery Ajax إلى طريقة الويب "Handledate" التي توفر معلمة DateValue كـ "18/10/000 2010". في ثقافة "PT-BR" ، يجب تقييم هذا حتى 18 أكتوبر 2010 (تنسيق تاريخ اليوم/الشهر/السنة).

عندما أقوم بتنفيذ هذا ، سأعود إلى خطأ يشير إلى أن "system.web.script.serialization.objectConverter" تفجر قائلاً إن "18/11/000" ليست قيمة صالحة لوقت البيانات. يشير تتبع المكدس المضمّن مع الخطأ إلى أن هذا تم إلقاؤه بواسطة "system.componentmodel.datetimecoverter.convertfrom" ، والتي تقبل الكائن الذي سيتم تحويله بالإضافة إلى كائن CultureInfo الذي يمثل الثقافة التي يجب تطبيقها أثناء التحويل.

لقد أطلقت عاكسًا ويبدو أن "ObjectConverter" يستدعي "DateTimeConverter" باستخدام مثيل CultureInfo.invariantCulture ، والذي أعتقد أنه المشكلة.

كيف يمكنني إجبار هذا المنطق على استخدام الثقافة المرتبطة بالخيط الحالي بدلاً من الثقافة الثابتة؟

هل كانت مفيدة؟

المحلول

أود أن أوصيك بتغيير نوع المعلمة إلى string ثم قم بتحليل نفسك باستخدام DateTime.Parse أو TryParse.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top