代码之家  ›  专栏  ›  技术社区  ›  Jared

初始加载编译后的ASP.Net MVC交换区域性

  •  3
  • Jared  · 技术社区  · 15 年前

    我有一个混合的ASP.Net web forms/MVC应用程序。在一个MVC“pages”视图中,我让它使用ToShortDateString()和ToLongDateString()呈现一堆日期。大多数情况下,它们都能正常工作,但在编译应用程序后第一次加载视图时,它们的格式不正确。

    我试过在web.config文件中设置culture和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"/>
    

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

    同样,这只是在编译代码之后的初始加载时,即该页首次加载时。其他web窗体页不受影响,即使它们来自System.web.Mvc.ViewPage。所有后续加载都正确处理区域性。仅仅更改.aspx文件不会导致这种情况,必须编译c代码才能导致这种情况。

    更多数据: 我已经找到了渲染方法。在Render方法之前,区域性是en-US,之后是en-GB(同样,仅在编译后的初始页面加载时)。

    5 回复  |  直到 13 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    在您的视图中,尝试创建一个基础视图-然后对于该特定视图,从中继承,如下所示: How to globalize ASP.NET MVC views (decimal separators in particular)? 但是你的更像是:

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

        2
  •  1
  •   Jared    15 年前

    这是由于对过期的第三方.dll的依赖关系造成的。一旦我找到了它,得到了更新的.dll,一切又都好了。

        3
  •  0
  •   Massimiliano Peluso    15 年前

    如何将区域性设置到web配置中?

    看看:

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

        4
  •  0
  •   Priyank    15 年前

    我对你的.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>" %>
    
        5
  •  0
  •   Lareau    15 年前

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