我有一个混合 ASP.Net Web 表单/MVC 应用程序。在其中一个 MVC“页面”/视图上,我让它使用 ToShortDateString() 和 ToLongDateString() 呈现一堆日期。这些大部分时间都可以正常工作,但是在编译应用程序后第一次加载视图时,它们的格式不正确。
我追查了这一点并检查了当前线程的文化。99% 的时间它是 en-US,但在编译后第一次加载 MVC 视图时,它被设置为 en-GB。如果我在那之后立即重新加载页面,它会回到 en-US。
我尝试将 web.config 文件中的文化和 uiculture 设置为 en-US 以强制它正确,但没有运气。
有人对此有任何想法吗?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"
同样,这仅在编译代码后的初始加载时,即该页面首次加载时。其他 Web 表单页面不受影响,即使它们来自 System.Web.Mvc.ViewPage。所有后续加载都会正确处理区域性。仅更改 .aspx 文件不会导致此问题,必须编译 c# 代码才能导致此问题。
更多数据:我已将其追溯到 Render 方法。在 Render 方法之前,文化是 en-US,之后是 en-GB(同样仅在编译后的初始页面加载时)。