سؤال

لديّ تطبيق ASP.NET Web Forms/MVC. على واحدة من "الصفحات"/وجهات النظر MVC ، جعلتها تقدم مجموعة من التواريخ باستخدام toshortdatestring () و tolongdatestring (). هذه تعمل بشكل صحيح معظم الوقت ، لكن في المرة الأولى التي أقوم فيها بتحميل العرض بعد تجميع التطبيق ، يتم تنسيقها بشكل غير صحيح.

تتبعت هذا لأسفل وفحصت ثقافة الموضوع الحالي. بالنسبة إلى 99 ٪ من الوقت ، فإنه في الولايات المتحدة ، ولكن في الحمل الأول من عرض MVC بعد تجميعه ، تم تعيينه على GB. إذا قمت بإعادة تحميل الصفحة مباشرة بعد ذلك ، فقد عادت إلى الولايات المتحدة.

لقد حاولت تعيين الثقافة وزراعة uic في ملف web.config لإجبارها على أن تكون صحيحة ، ولكن لا حظ.

أي شخص لديه أي أفكار حول هذا؟ علة في MVC؟

تحرير (رمز إضافي ومحاولات): حتى لو ذهبت إلى الخارج تمامًا وقمت بتضمين هذا في الفئة الأساسية للعرض

public class DNViewPage<T> : ViewPage<T> where T : class
    {

        protected override void OnInit(EventArgs e) {
            base.OnInit(e);
            CultureInfo cultureInfo = new CultureInfo("en-US");
            this.Culture = "en-US";
            this.UICulture = "en-US";
            Thread.CurrentThread.CurrentUICulture = cultureInfo;
            Thread.CurrentThread.CurrentCulture = cultureInfo;
        }

        protected void Page_Load(object sender, EventArgs e) {
            CultureInfo cultureInfo = new CultureInfo("en-US");
            this.Culture = "en-US";
            this.UICulture = "en-US";
            Thread.CurrentThread.CurrentUICulture = cultureInfo;
            Thread.CurrentThread.CurrentCulture = cultureInfo;
        }

        protected override void InitializeCulture() {

            CultureInfo cultureInfo = new CultureInfo("en-US");
            this.Culture = "en-US";
            this.UICulture = "en-US";
            Thread.CurrentThread.CurrentUICulture = cultureInfo;
            Thread.CurrentThread.CurrentCulture = cultureInfo;

            base.InitializeCulture();
        }
    }

وتضمين هذا في web.config

<globalization requestEncoding="utf-8" responseEncoding="utf-8" uiCulture="en-US" culture="en-US"/>

وهذا في رأس ملف .aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Culture="en-US" UICulture="en-US"

مرة أخرى ، هذا فقط على التحميل الأولي بعد تجميع الكود ، عندما يتم تحميل هذه الصفحة لأول مرة. لا تتأثر صفحات نماذج الويب الأخرى ، حتى لو كانت تنحدر من system.web.mvc.viewpage. جميع الأحمال اللاحقة تعالج الثقافة بشكل صحيح. فقط تغيير ملف .aspx لا يسبب هذا ، يجب تجميع رمز C# للتسبب في ذلك.

المزيد من البيانات: لقد تعقبها إلى طريقة العرض. قبل طريقة العرض ، تكون الثقافة en-us وبعد ذلك تكون EN-GB (مرة أخرى فقط على pageload الأولي بعد التجميع).

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

المحلول 2

اتضح أن هذا ناتج عن التبعية على طرف ثالث. بمجرد أن قمت بتتبعه ، وحصلت على التحديث. dll ، كان كل شيء على ما يرام مرة أخرى.

نصائح أخرى

من وجهة نظرك ، حاول إنشاء طريقة عرض قاعدة - ثم يرث هذا العرض بالذات كما حدث هنا: كيفية عولمة ASP.NET MVC وجهات نظر (فواصل عشرية على وجه الخصوص)؟ومع ذلك سيكون لك أكثر مثل:

protected override void InitializeCulture()
{
    base.InitializeCulture();
    CultureInfo cultureInfo = new CultureInfo("en-US");
    Thread.CurrentThread.CurrentUICulture = cultureInfo;
}

أعتقد أنه كانت هناك بعض المشكلات مع مفتاح العولمة تعمل بشكل صحيح.

كيف قمت بتعيين الثقافة في تكوين الويب؟

هل تستخدم مفتاح "العولمة"؟

القي نظرة على:

http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

ملاحظتي الأولى لصفحة .aspx الخاصة بك ،

أنت لا ترث صفحة ASPX الخاصة بك من فئة Pare ViewPage. حاول إضافة هذا إلى علامة رأس صفحة ASPX الخاصة بك.

Inherits="XXX.Views.DNViewPage<YYY.Models.zzzViewModel>"

لذلك يجب أن يبدو هكذا ،

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="XXX.Views.DNViewPage<YYY.Models.zzzViewModel>" %>

هل حاولت صنع وحدة تحكم قاعدة؟ لقد غيرت الثقافة مع تطبيق في العمل في ذلك عملت بشكل جيد.

public class BaseController : Controller
{
    public string ActionName;
    public string ControllerName;

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        //Switch the language in here?
       CultureInfo cultureInfo = new CultureInfo("en-US");
        this.Culture = "en-US";
        this.UICulture = "en-US";
        Thread.CurrentThread.CurrentUICulture = cultureInfo;
        Thread.CurrentThread.CurrentCulture = cultureInfo;

        base.OnActionExecuting(context);
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top