2010-10-17 95 views
3

我有以下模型和視圖,我非常希望以'dd/MM/yyyy'格式接受日期值。但是,儘管使用了DisplayFormat註釋,但仍然使用我選擇的格式得到驗證錯誤。MVC應用程序中的自定義日期格式問題

[MetadataType(typeof(MilestoneMetadata))] 
public partial class Milestone {  
    public class MilestoneMetadata { 
     [Required][DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] 
     public object Date { get; set; } 
    } 
} 

和視圖:

<div class="editor-field"> 
    <%: Html.EditorFor(model => model.Date) %> 
    <%: Html.ValidationMessageFor(model => model.Date) %> 
</div> 

命名空間等是正確的註釋和主要類是在相同的命名空間。這不是我第一次遇到這個問題,但我看不到任何應該影響表單值和模型之間映射的註釋結果。日期模板不能幫助我,因爲我無法找到設置發佈創建或更新日期的方式。

注意:我不希望使用不同的UI文化來實現這一點。

回答

5

嘗試設置web.config中的uiCulture(如果你離開它auto客戶端瀏覽器的文化將被使用):

<globalization uiCulture="en-US" 
       requestEncoding="utf-8" 
       responseEncoding="utf-8" /> 

這將迫使en-US文化格式時,默認的模型綁定解析請求的值(根據需要適應所需的文化)。

還有一個Date屬性鍵入到System.Object是不是一個很好的設計。

+0

感謝Darin,我發現如果我將文化設置爲'en-GB',我會得到正確的格式處理。如果我將它設置爲'en-ZA',我必須使用'yyyy/MM/dd'格式。我真正的目標是不改變文化,但仍然改變日期格式。 System.Object類型的屬性從不使用。真正的日期屬性被聲明爲System.DateTime。 'object'屬性僅用於其屬性。 – ProfK 2010-10-17 15:30:23

+0

在這種情況下,您需要編寫自定義模型聯編程序並手動將請求字符串解析爲DateTime。 – 2010-10-17 15:33:38

+0

是的,謝謝。我已經爲所有DateTime值完成了一個模型綁定,但這似乎是一個非常長的時間來完成這樣的任務。 – ProfK 2010-10-17 17:55:49