MVC DateTime 验证 - 英国日期格式
Posted
技术标签:
【中文标题】MVC DateTime 验证 - 英国日期格式【英文标题】:MVC DateTime validation - UK Date format 【发布时间】:2012-08-21 10:31:58 【问题描述】:我有一个简单的视图,其中包含两个日期字段,并为不显眼的 javascript 验证添加了 ValidationMessageFor 控件。
我的问题是我一直被告知我的日期无效,但格式正确 (dd/MM/yyyy)
我已将 <globalization culture="en-GB" uiCulture="en-GB"/>
添加到我的 web.config,并且还在每个 DateTime 属性中添加了 [DisplayFormat(DataFormatString = "0:dd/MM/yyyy", ApplyFormatInEditMode = true)]
,但它仍然不接受英国格式的日期。
我在这里有什么明显的遗漏吗?
【问题讨论】:
所以,通过这篇文章解决了 -> ***.com/questions/511439/… 但是为什么我需要创建自定义验证方法?当然,如果我在模型中指定格式,并指定我的文化,它应该使用该日期格式吗? 您的服务器没有按照您需要的文化运行吗? @SimonWhitehead 好像是这样,但是在我的开发机器上本地运行时也会发生这种情况 我也遇到过类似的问题:***.com/questions/9821407/mvc3-en-gb-dates-in-get 因为微软相信在美国以外没有人存在,这就是为什么 :) 虽然“没有人在外面”的评论是真的,但我认为这有点误导,因为不是 MS,而是大多数美国开发人员认为在美国以外没有人存在,和 与此同时,大多数英国开发者认为在英国以外没有人存在,依此类推…… 【参考方案1】:其实你只需要为日期重载不显眼的 JavaScript 验证方法
jQuery(function ($)
$.validator.addMethod('date',
function (value, element)
if (this.optional(element))
return true;
var ok = true;
try
$.datepicker.parseDate('dd/mm/yy', value);
catch (err)
ok = false;
return ok;
);
);
【讨论】:
additional-methods.js库中有一种国际日期验证方法可以替代使用。 在我的例子中,我已经替换了 parseDate() 调用,因为我想使用日期和时间(而且似乎 datepicker 不支持这个),所以我使用了这个:` var re = /\d4-[01]\d-[0-3]\d [0-2]\d:[0-5]\d/;变量确定;试试 ok = value.match(re) != null; ` 澄清一下,@lutecki 的正则表达式验证 yyyy-mm-dd hh:mm【参考方案2】:Bohdan 的例子很有效!我已经 +1 你的回答伙伴。
为了完整起见,我写了一篇关于如何集成所有部分(模型、视图、自定义 EditorTemplate、jQuery 包括和添加 Bohdan 的解决方案)的博文。
您可以在这里阅读:http://www.kestrelblackmore.com/blog/jquery-datepicker-mvc4
【讨论】:
把它放在博客上并一步一步解释整个过程真是太好了,谢谢。【参考方案3】:我知道它很旧,但使用它我向输入添加了一个具有当前日期格式的属性(我使用 CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToLower() 从 ASP MVC 代码中获取)。
然后我重写了验证 javascript 以使用属性中找到的格式。
var format = "mm/dd/yyyy";
if (element.attributes["data-format"])
format = element.attributes["data-format"].value;
我还为 jquery ui datepicker 读取了相同的属性。它可能没有那么有用,但它至少可以使格式与文化保持一致。虽然它可以帮助某人
【讨论】:
【参考方案4】:与其他答案相比,我采取了不同的方法来解决这个问题。使用 jQuery 添加一个新的日期函数,该函数将强制日期使用应用程序中设置的当前本地文化。
$.validator.addMethod('date', function (value, element)
var d = new Date();
return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));
);
如果 jQuery 验证失败。我将此答案归功于 Elton Stoneman 的帖子,可以阅读 here
希望这对其他人有帮助。
【讨论】:
嗨,Aim,看起来是一个不错的简单解决方案。你在哪里插入这个? @mattpm 您将把它插入到具有日期字段的视图的 JavaScript 代码中【参考方案5】:尝试在 jquery.validate.js 中直接更改。使用 $.datpicker
date: function (value, element)
var s = value;
var ind2 = 3;
var ind3 = 6;
var ind4 = 4;
if (s.substr(6, 1) != "2")
ind2 = ind2 + 1;
ind3 = ind3 + 1;
ind4 = ind4 + 1;
var ndan = s.substr(0, 2);
var nmje = s.substr(ind2, 2);
var ngod = s.substr(ind3, ind4);
var ns = ngod + "," + nmje + "," + ndan;
return this.optional(element) || !/Invalid|NaN/.test(new Date(ns));
【讨论】:
以上是关于MVC DateTime 验证 - 英国日期格式的主要内容,如果未能解决你的问题,请参考以下文章
使用 pandas.to_datetime 转换时指定日期格式
需要使用 MVC 中的表单验证从服务器端验证 DateTime