日期时间的Razor DisplayFor =输入字符串的格式不正确

最近我更新了我的MVC 4应用程序的几个引用程序集,并升级到MVC 5.1。 不确定这是否与它有关。

模型

[Display(Name = "Start")] [DisplayFormat(DataFormatString = "{0t}")] public System.DateTime StartDateTime { get; set; } 

现在我在一个简单的razor html助手上遇到了一个奇怪的错误

 @Html.DisplayFor(model => model.StartDateTime) 

给出错误: Input string was not in a correct format

如果你在调试器中查看该字段的值,它的类型为System.DateTime并显示: 2/28/2014 10:17 AM

更改为@Html.EditorFor可正确呈现数据时间。

我的DisplayTemplates文件夹为空。

堆:

 [FormatException: Input string was not in a correct format.] System.Text.StringBuilder.AppendFormat(IFormatProvider provider, String format, Object[] args) +14321177 System.String.Format(IFormatProvider provider, String format, Object[] args) +136 System.Web.Mvc.Html.TemplateHelpers.TemplateHelper(HtmlHelper html, ModelMetadata metadata, String htmlFieldName, String templateName, DataBoundControlMode mode, Object additionalViewData, ExecuteTemplateDelegate executeTemplate) +775 System.Web.Mvc.Html.TemplateHelpers.TemplateHelper(HtmlHelper html, ModelMetadata metadata, String htmlFieldName, String templateName, DataBoundControlMode mode, Object additionalViewData) +241 System.Web.Mvc.Html.TemplateHelpers.TemplateFor(HtmlHelper`1 html, Expression`1 expression, String templateName, String htmlFieldName, DataBoundControlMode mode, Object additionalViewData, TemplateHelperDelegate templateHelper) +332 System.Web.Mvc.Html.TemplateHelpers.TemplateFor(HtmlHelper`1 html, Expression`1 expression, String templateName, String htmlFieldName, DataBoundControlMode mode, Object additionalViewData) +333 System.Web.Mvc.Html.DisplayExtensions.DisplayFor(HtmlHelper`1 html, Expression`1 expression) +151 ASP._Page_Areas_Mobile_Views_LogTimeForPart_CurrentTask_cshtml.Execute() in c:\Users\Chad\documents\Incite Systems\clients\hh metals\20 - development\otis\app\otis.web\Areas\Mobile\Views\LogTimeForPart\CurrentTask.cshtml:41 System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +392 System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +165 System.Web.WebPages.StartPage.RunPage() +77 System.Web.WebPages.StartPage.ExecutePageHierarchy() +123 System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +212 System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +1161 System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +639 System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +828 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +65 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +178 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +1131 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +181 System.Web.Mvc.Async.c__DisplayClass2b.b__1c() +549 System.Web.Mvc.Async.c__DisplayClass21.b__1e(IAsyncResult asyncResult) +330 System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +71 System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +196 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +73 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +58 System.Web.Mvc.Controller.b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +90 System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +188 System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +196 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +73 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +50 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +68 System.Web.Mvc.Controller.b__15(IAsyncResult asyncResult, Controller controller) +60 System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +85 System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +196 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +73 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +50 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +58 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +60 System.Web.Mvc.MvcHandler.b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +93 System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +188 System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +196 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +73 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +50 System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +58 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +59 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288 

尝试指定DisplayFormat属性,例如(在您的模型属性上):

 [DisplayFormat(DataFormatString = "{0:C}")] public DateTime StartDateTime { get; set; } 

根据编辑的问题进行编辑:

您的显示格式的语法不正确 – 它缺少冒号。 这样做(注意0t之间的冒号):

 [Display(Name = "Start")] [DisplayFormat(DataFormatString = "{0:t}")] public System.DateTime StartDateTime { get; set; } 

做了些蠢事。 我的一些[Display(Name = "Start")]有一个冒号:在名称之后,在表单上呈现它。 我使用Visual Studio中的替换来替换冒号“”,这也删除了{0:t}格式字符串注释之间的冒号。 [DisplayFormat(DataFormatString = "{0t}")] 。 抱歉浪费了我的愚蠢时间! 谢谢大家的回复。