【发布时间】:2012-07-01 15:19:08
【问题描述】:
如何在 asp.net mvc 4 中强制日期时间的格式? 在显示模式下,它按我的意愿显示,但在编辑模式下却没有。 我正在使用 displayfor 和 editorfor 以及 applyformatineditmode=true 和 dataformatstring="{0:dd/MM/yyyy}" 我尝试过的:
- web.config(两者)中的全球化与我的文化和 uiculture。
- 在application_start()中修改culture和uiculture
- 用于日期时间的自定义模型绑定器
我不知道如何强制它,我需要输入日期为 dd/MM/yyyy 而不是默认值。
更多信息: 我的视图模型是这样的
[DisplayName("date of birth")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? Birth { get; set; }
在视图中我使用 @Html.DisplayFor(m=>m.Birth) 但这按预期工作(我看到了格式)
并输入我使用@Html.EditorFor(m=>m.Birth) 的日期,但如果我尝试输入类似 13/12/2000 的内容,则会失败,并显示它不是有效日期(12/13/2000 和 2000/12/13 正在作为预期,但我需要 dd/MM/yyyy)。
自定义模型绑定器在 application_start() 中调用 b/c 我不知道还有哪里。
使用<globalization/> 我尝试过使用culture="ro-RO", uiCulture="ro" 和其他可以给我dd/MM/yyyy 的文化。
我还尝试在 application_start() 中基于每个线程设置它(这里有很多示例,说明如何执行此操作)
对于所有将阅读此问题的人: 只要我没有客户验证,Darin Dimitrov 的答案似乎就可以工作。 另一种方法是使用自定义验证,包括客户端验证。 我很高兴在重新创建整个应用程序之前发现了这一点。
【问题讨论】:
-
您能提供更多信息吗?你的模型、控制器和视图?还提供一个示例,说明您在显示和编辑器模板之间获得的不同输出。另请注意,文化是按线程设置的。您提到了一些关于
Application_Start的内容,但这只在您的应用程序启动时执行一次。后续请求呢?您如何为他们设置文化? -
application_start 只执行一次!请改用 application_beginRequest!
-
Nas,application_beginRequest 在哪里?我只在 Global 中看到 application_start。在 mvc 4 中,事情开始与 mvc 3 有所不同
标签: asp.net-mvc asp.net-mvc-4 datetime-format