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

时间:2013-07-10 07:59:49

标签: c# asp.net-mvc modelbinders

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

TryParseDate(result.AttemptedValue, format, out parsedDate) 

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

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

提前谢谢!

1 个答案:

答案 0 :(得分: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)

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

如果你真的必须接受每个语言环境的多种格式,你需要编写一个自定义模型绑定器,并且可能想尝试为你处理的每个语言环境传递一组可接受的格式。