ASP.NET MVC3 – date时间格式

我正在使用ASP.NET MVC 3。
我的ViewModel看起来像这样:

public class Foo { [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)] public DateTime StartDate { get; set; } ... } 

鉴于,我有这样的东西:

 <div class="editor-field"> @Html.EditorFor(model => model.StartDate) <br /> @Html.ValidationMessageFor(model => model.StartDate) </div> 

StartDate以正确的格式显示,但是当我将其值更改为19.11.2011并提交表单时,出现以下错误消息:“值”19.11.2011“对于StartDate无效。

任何帮助将不胜感激!

您需要在dd.MM.yyyy是有效的date时间格式的web.config文件的全球化元素中设置适当的文化:

 <globalization culture="...." uiCulture="...." /> 

例如,这是德文的默认格式: de-DE


更新:

根据您在评论部分的要求,你想保持应用程序的美国文化,但仍然使用不同的date格式。 这可以通过编写一个自定义模型绑定来实现:

 using System.Web.Mvc; public class MyDateTimeModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { var displayFormat = bindingContext.ModelMetadata.DisplayFormatString; var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); if (!string.IsNullOrEmpty(displayFormat) && value != null) { DateTime date; displayFormat = displayFormat.Replace("{0:", string.Empty).Replace("}", string.Empty); // use the format specified in the DisplayFormat attribute to parse the date if (DateTime.TryParseExact(value.AttemptedValue, displayFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) { return date; } else { bindingContext.ModelState.AddModelError( bindingContext.ModelName, string.Format("{0} is an invalid date format", value.AttemptedValue) ); } } return base.BindModel(controllerContext, bindingContext); } } 

你将在Application_Start注册:

 ModelBinders.Binders.Add(typeof(DateTime), new MyDateTimeModelBinder()); 

根据你的评论,我看到你想要的是一个英文目前,但具有不同的date格式(纠正我,如果我错了)。

事实是, DefaultModelBinder使用表单数据的服务器的文化设置。 所以我可以说服务器使用“en-US”文化,但使用不同的date格式。

你可以在Application_BeginRequest做这样的事情,你就完成了!

 protected void Application_BeginRequest() { CultureInfo info = new CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.ToString()); info.DateTimeFormat.ShortDatePattern = "dd.MM.yyyy"; System.Threading.Thread.CurrentThread.CurrentCulture = info; } 

Web.Config中

 <globalization culture="en-US" /> 

将以下代码添加到global.asax.cs文件中

 protected void Application_BeginRequest() { CultureInfo info = new CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.ToString()); info.DateTimeFormat.ShortDatePattern = "dd.MM.yyyy"; System.Threading.Thread.CurrentThread.CurrentCulture = info; } 

并将<system.web> web.config <system.web>添加到<system.web>

 <globalization culture="en-US">;