我有一个混合ASP.NET Web表单/MVC应用程序。在MVC的“页面”/视图之一上,我使用toshortDateString()和tolongdateString()呈现一堆日期。这些大多数时间都正确地工作了,但是在编译应用程序后我第一次加载视图时,它们的格式不正确。

我追踪了这一点,并检查了当前线程的文化。在99%的时间内,它是EN-US,但是在编译后的MVC视图的第一个负载下,将其设置为engB。如果我在那之后立即重新加载页面,那就回到en-us。

我已经尝试在Web.config文件中设置文化和UICULTURE,以迫使它是正确的,但没有运气。

有人对此有任何想法吗? 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下降。随后的所有负载正确处理培养物。仅更改.aps文件并不会导致此功能,就必须编译C#代码才能引起这一点。

更多数据:我将其跟踪到渲染方法。在渲染方法之前,培养为en-us,然后是engb(仅在汇编后才在初始pageload上)。

有帮助吗?

解决方案 2

事实证明,这是由于对过时的依赖性,第三方.dll引起的。一旦我跟踪它并获得了更新的.dll,一切都很好。

其他提示

在您的视图中,尝试创建一个基本视图 - 然后,对于该特定视图,请在此处从中继承下来: 如何全球化ASP.NET MVC视图(尤其是十进制分离器)?但是您的更像是:

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

我相信全球化密钥正常工作存在一些问题。

您如何将文化设置为Web配置?

您是否使用“全球化”密钥?

看一下:

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

我对您的.aspx页面的第一个观察结果,

您没有从基本视图页类继承您的ASPX页面。尝试将其添加到您的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