Asp.net mvc 4 MVC 4日期文化问题?

Asp.net mvc 4 MVC 4日期文化问题?,asp.net-mvc-4,Asp.net Mvc 4,我正在使用MVC4,我想知道Datetime区域性信息中是否有bug 我试图让澳大利亚的日期生效(dd/MM/yyyy),但它一直说日期格式是错误的,即使在将全球化添加到web.config之后也是如此。我认为这是我的代码中的一个错误,但即使你开始一个新项目,它仍然会发生 我启动了一个新的MVC4Web应用程序 将以下内容添加到web.config文件中 <globalization culture="en-AU" uiCulture="en-AU" /> 然后,我将以下内容添加到

我正在使用MVC4,我想知道Datetime区域性信息中是否有bug

我试图让澳大利亚的日期生效(dd/MM/yyyy),但它一直说日期格式是错误的,即使在将全球化添加到web.config之后也是如此。我认为这是我的代码中的一个错误,但即使你开始一个新项目,它仍然会发生

我启动了一个新的MVC4Web应用程序

将以下内容添加到web.config文件中

<globalization culture="en-AU" uiCulture="en-AU" />
然后,我将以下内容添加到Register.cshtml文件中:

  • @LabelFor(m=>m.MyDate) @Html.TextBoxFor(m=>m.MyDate)
  • 运行应用程序,转到“注册”页面,尝试2013年3月26日这样的日期,结果显示格式无效


    请提供帮助。

    尝试将此属性添加到您的
    MyDate
    属性:

    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    
    虽然在web.config中设置区域性应该可以做到这一点,但这应该强制它使用该格式

    更新

    好的,上面的答案并不能真正解决这个问题,但是如果您确实想更改日期最初显示的格式,这一点很重要。一个重要的注意事项是
    DisplayFormat
    属性不是由
    TextBoxFor
    helper拾取的,而是由
    编辑器for
    helper拾取的

    不管怎么说,现在是真正的解决方案。问题是jQuery验证在解析日期时没有考虑区域性。如果关闭客户端验证,则在知道区域性的服务器上可以很好地解析日期

    修复方法是覆盖日期的jQuery验证,并包括一个额外的jQuery全球化插件。您可以找到globalize插件。您还可以使用Nuget软件包管理器轻松下载插件。我刚刚打开包管理器,选择左边的在线选项卡,在搜索中键入“globalize”,这是第一个结果。安装后,我将包括以下两个文件:

    globalize.js
    globalize.culture.en-AU.js

    您可以使用脚本标记直接包含它们,也可以将它们放在一个捆绑包中,可能和其他jQuery验证文件一起使用

    一旦完成这些操作,您将需要添加以下脚本以覆盖日期的jQuery验证:

    <script type="text/javascript">
        $(function () {
            $.validator.methods.date = function (value, element) {
                Globalize.culture("en-AU");
                // you can alternatively pass the culture to parseDate instead of
                // setting the culture above, like so:
                // parseDate(value, null, "en-AU")
                return this.optional(element) || Globalize.parseDate(value) !== null;
            }
        });
    </script>
    
    
    $(函数(){
    $.validator.methods.date=函数(值,元素){
    全球化。文化(“欧洲”);
    //您也可以将区域性传递给parseDate,而不是
    //在上面设置区域性,如下所示:
    //parseDate(值,null,“en-AU”)
    返回此.optional(元素)| | Globalize.parseDate(值)!==null;
    }
    });
    

    就这样,这就应该起作用了。我将此解决方案归功于以下回答:我还想针对您的问题提供更多解释。

    创建代理函数怎么样

    var _date = $.validator.methods.date;
    
    $.validator.methods.date = function (value, element) {
        return _date.call(this, Globalize.parseDate(value), element);
    };
    

    接受的答案不是最新的我的最终工作解决方案:

    $(function () {
        $.validator.methods.date = function (value, element) {
            return this.optional(element) || moment(value, "DD.MM.YYYY", true).isValid();
        }
    });
    
    您必须包括以下内容:

    @Scripts.Render("~/Scripts/jquery-3.1.1.js")
    @Scripts.Render("~/Scripts/jquery.validate.min.js")
    @Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js")
    @Scripts.Render("~/Scripts/moment.js")
    
    您可以使用以下方式安装momente.js:

    Install-Package Moment.js
    

    在下面的土耳其文化中

    <globalization 
    fileencoding="utf-8" 
    requestencoding="utf-8" 
    responseencoding="utf-8" 
    culture="tr-TR" 
    uiculture="tr-TR"/>
    
    
    
    这不起作用。你能试着创建一个新的项目,并遵循以下步骤吗?我想解决这个问题,真是疯了。。我的安装有问题吗?我的机器?我正在使用IIS Express,因为我直接从vs2012运行它。。这可能是个问题吗?这是我的项目的链接,它只是一个全新的项目,上面提到了这些变化。。我会在本地试一试,看看会发生什么。我没有太多的全球化应用程序或改变文化的经验,但这应该是所有必要的。好的,我相信我明白了!事实证明,除非您使用jQuery验证,否则在web.config中设置区域性几乎就是您需要做的全部工作。当我忽略客户端验证时,日期工作得很好,当我包含它时,它抱怨了您所说的格式。修复方法是覆盖日期的jQuery验证,并包括一个额外的jQuery globalize库,该库允许以其他区域性格式解析日期。请查看我答案中的更新以获得完整的解释。无症状故障-你太棒了,非常感谢。成功了。你是一位学者和绅士。再次感谢,非常感谢你的帮助。谢谢你,这是MVC5的作品。太糟糕了,MVC5已经没有“标准化”文件了。。。
    Install-Package Moment.js
    
    <globalization 
    fileencoding="utf-8" 
    requestencoding="utf-8" 
    responseencoding="utf-8" 
    culture="tr-TR" 
    uiculture="tr-TR"/>