2011-12-29 62 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