在binder中解析日期的最佳方法是什么?

Ser*_*gey 6 c# asp.net-mvc modelbinders

这是模型绑定器中的好方法使用这样的代码:

TryParseDate(result.AttemptedValue, format, out parsedDate) 
Run Code Online (Sandbox Code Playgroud)

然后"格式"是具有不同(客户特定)日期格式的变量.如2013年12月31日或2013年12月31日或其他.

我对格式绑定有很大的问题,因为如果用户只将日期设置为1位数:2014年1月1日它将不会解析,因为在"格式"值允许的格式:dd/MM/yyyy我知道它是可能的通过将此格式替换为d/M/yyyy进行解决,然后它适用于这两种情况,但它是好的方法还是危险的?

先感谢您!

Pau*_*lor 1

我建议保留默认的模型绑定器来完成其工作,它做得非常好,并且会为您处理本地化问题(即不同区域设置的不同日期格式)。

yyyy-MM-dd请考虑,用户输入日期的方式始终存在限制(例如,您不允许他们输入,即使它是有效的日期格式)。您的自定义活页夹代码不会改变这一点,因为它提供了一种格式。

我建议您的目标应该是允许用户以他们最常用的格式输入日期(例如dd/MM/yyyy在英国或西班牙、MM/dd/yyyy美国等)。这将处理大多数情况。如果您需要满足不同区域设置的用户的需求,只要您为用户会话设置线程区域性,默认的模型绑定器就会为您完成这一切:

string cultureCode = "en-GB";    //retrieve eg. from user profile
Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureCode)
Run Code Online (Sandbox Code Playgroud)

如果您想帮助以其他格式输入日期的用户,只需在页面上添加一个提示来解释所需的格式即可。

如果您确实必须为每个区域设置接受多种格式,则需要编写一个自定义模型绑定程序,并且可能希望尝试为您处理的每个区域设置传递一组可接受的格式。