我的 Web 应用程序支持多种日期时间格式,即yyyy-MM-dd
、yyyy.MM.dd
和. 前两个完美地工作,但是,当我使用其他两种格式时,斜线在初始打印中被替换为破折号,这使得它们无法通过验证。但是,如果我选择一个日期,它会以正确的(选择的)格式出现。dd/MM/yyyy
MM/dd/yyyy
我正在使用文化 sv-SE。
我的 Web 应用程序支持多种日期时间格式,即yyyy-MM-dd
、yyyy.MM.dd
和. 前两个完美地工作,但是,当我使用其他两种格式时,斜线在初始打印中被替换为破折号,这使得它们无法通过验证。但是,如果我选择一个日期,它会以正确的(选择的)格式出现。dd/MM/yyyy
MM/dd/yyyy
我正在使用文化 sv-SE。
我怀疑(没有 Kendo UI 的经验,但有其他日期/时间 API 的经验)“/”被视为“特定于文化的日期分隔符”。如果您想要“完全是正斜杠,无论文化如何”,您可能需要转义它。
转义的执行方式取决于库,但通常您只使用引号,例如
dd'/'MM'/'yyyy
MM'/'dd'/'yyyy
正如Jon在他的回答中指出的那样,这是关于/
成为 .NET自定义日期格式中的特殊字符。
使用 Kendo 时,这会让人感到困惑,因为它不用/
作特殊字符。
使用单独的格式字符串客户端和服务器端应该是答案,但不幸的是,在MVC 的 Telerik UI(在客户端使用 Kendo)中,客户端和服务器端都使用单个格式字符串以及用于 Kendo 的 MVC 助手。
例如,在日期格式为“dd-MM-yyyy”(在 Windows 区域设置中设置)和视图模型的服务器上:
[Display(Name="Date")]
[UIHint("Date")]
[DisplayFormat(DataFormatString = Constants.DateFormat, ApplyFormatInEditMode = true)]
public DateTime Date { get; set; }
(Constants.DateFormat
是“dd/MM/yyyy”)然后有一个编辑器模板(“Date.cshtml”):
@(Html.Kendo().DatePickerFor(m => m)
导致初始日期显示“29-05-2015”和 JavaScript 错误,因为它无法解析。
作为一种解决方法
@(Html.Kendo().DatePickerFor(m => m)
.ParseFormats(new[] { "dd-MM-yyyy", Constants.DateFormat}))
生成的 HTML 中的格式是错误的,但 JavaScript 至少能够理解它。(这当然应该DateTimeFormatInfo.DateSeparator
用来动态构建替代格式。)