2011-12-29 36 views
13

我使用下面的代码为什么DataFormatString的DisplayFormat将“/”(斜杠)更改为“ - ”(短划线)?

// Model 
[DisplayFormat(
    ApplyFormatInEditMode = true, 
    DataFormatString = "{0:dd/MM/yyyy}")] 
public DateTime StartDate { get; set; } 

// View 
@Html.EditorFor(model => model.StartDate) 

格式化StartDate但结果却是xx-xx-xxxx,而不是xx/xx/xxxx。我该如何解决这个问题并始终使用xx/xx/xxxx格式?

UPDATE: 改变文化en-US似乎工作:

var culture = new CultureInfo(userCulture); 
System.Threading.Thread.CurrentThread.CurrentCulture = "en-US"; 
System.Threading.Thread.CurrentThread.CurrentUICulture = "en-US"; 

但这是不是一个解决方案,因为我可能会使用不同的文化,我还是想显示的日期一种不同的方式。

如果当前的文化告诉日期应该显示dd-MM-yyyy然后使用DisplayFormat如上所述没有影响,并且日期不显示像dd/MM/yyyy

+0

你是指“我可能在使用不同的文化,我还想用不同的方式显示日期”是什么意思? – 2011-12-29 21:05:58

+0

假设当前用户使用文化“pt-PT”,那么当我想要显示它时,DisplayFormat会将其更改为“dd-MM-yyyy”(应该是这样):“dd/MM/yyyy” – Dryadwoods 2011-12-29 21:14:03

+0

这有点神秘,如果用户文化认为破折号应该是分隔符,那么您坚持使用斜杠。 – 2011-12-30 14:50:12

回答

25

使用DataFormatString = @"{0:dd\/MM\/yyyy}"代替。由于/标识的字符应该被当前文化的默认日期分隔符替换,所以您需要将其转义以便将其用作格式中的文字。

这样你就有了一个固定格式,而不是一个动态使用当前文化的日期分隔符的格式。

一种替代逃脱/字符可以是:DataFormatString = "{0:dd'/'MM'/'yyyy}"

+1

谢谢,这个工程在本地机器上,但我们的网站托管在另一个国家,它需要'MM/dd/yyyy'格式,否则它显示验证错误'该字段BeginDate必须是一个日期.',我怎样才能使服务器接受'dd/MM/yyyy'格式? – stom 2015-04-02 05:58:40

0

可以将其更改为DataFormatString = "{0:d}"

这应该给你MM/DD /年短日期模式

+0

Nop,仍然是相同的结果:P无论如何。 – Dryadwoods 2011-12-29 20:51:02

+0

这可能只是给你1位数的月份和日期,如果它是在10 – 2011-12-29 20:53:41

+0

什么DataFormatString =“{0:MM/dd/yyyy}” – 2011-12-29 20:54:49

2

改变服务器区域设置”的短日期格式使用斜线例如yyyy/MM/dd
这解决了我的问题。

+0

感谢您的评论,但这不是一个正确的解决方案,因为服务器/农场/云可以“提供”几个不同的项目,或者相关的Web应用程序可以提供多种文化功能。 – Dryadwoods 2012-11-29 08:48:43