MVC应用程序中的自定义日期格式问题

问题描述:

我有以下模型和视图,我非常希望以'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文化来实现这一点。

尝试设置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