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">;