繁体   English   中英

编译初始加载后ASP.Net MVC切换文化

[英]ASP.Net MVC switching Cultures after compile for initial load

我有一个混合ASP.Net Web表单/ MVC应用程序。 在其中一个MVC“页面”/视图中,我使用ToShortDateString()和ToLongDateString()渲染了一堆日期。 这些在大多数情况下都能正常工作,但是第一次在编译应用程序后加载视图时,它们的格式不正确。

我追查了这一点并检查了当前线程的文化。 99%的时间它是en-US,但在编译后第一次加载MVC视图时,它被设置为en-GB。 如果我在此之后立即重新加载页面,它将返回en-US。

我已经尝试将web.config文件中的culture和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(再次仅在编译后的初始页面加载)。

在您的视图中,尝试创建一个基本视图 - 然后对于该特定视图继承它,如下所示: 如何全球化ASP.NET MVC视图(特别是小数分隔符)? 但是你的更像是:

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

我认为全球化密钥正常运作存在一些问题。

原来这是由对过时的第三方.dll的依赖造成的。 一旦我追踪它,并得到更新的.dll,一切都很好。

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

你在使用“全球化”键吗?

看一下:

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

你试过制作一个基本控制器吗? 我在应用程序中改变了文化,工作得非常好。

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);
    }
}

我对.aspx页面的第一次观察,

您没有从基础ViewPage类继承您的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>" %>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM