Fixed rfc3339 formats to work with all localizations (#7066)

* Amend rfc3339 formats to work with all localizations
Changed time separator ":" to "\:" to prevent it from being substituted with a localized separtor. For example in it-IT locale, datetime-local was formatted as 2017-11-19T22.52.29.223 instead of correct format 2017-11-19T22:52:29.223
This commit is contained in:
avertes 2017-11-22 01:10:18 +02:00 committed by Doug Bunting
parent 86ef25e007
commit ee5535203e
3 changed files with 13 additions and 13 deletions

View File

@ -60,9 +60,9 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
new Dictionary<string, string>(StringComparer.Ordinal) new Dictionary<string, string>(StringComparer.Ordinal)
{ {
{ "date", "{0:yyyy-MM-dd}" }, { "date", "{0:yyyy-MM-dd}" },
{ "datetime", "{0:yyyy-MM-ddTHH:mm:ss.fffK}" }, { "datetime", @"{0:yyyy-MM-ddTHH\:mm\:ss.fffK}" },
{ "datetime-local", "{0:yyyy-MM-ddTHH:mm:ss.fff}" }, { "datetime-local", @"{0:yyyy-MM-ddTHH\:mm\:ss.fff}" },
{ "time", "{0:HH:mm:ss.fff}" }, { "time", @"{0:HH\:mm\:ss.fff}" },
}; };
/// <summary> /// <summary>

View File

@ -348,13 +348,13 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
public static IHtmlContent DateTimeOffsetTemplate(IHtmlHelper htmlHelper) public static IHtmlContent DateTimeOffsetTemplate(IHtmlHelper htmlHelper)
{ {
ApplyRfc3339DateFormattingIfNeeded(htmlHelper, "{0:yyyy-MM-ddTHH:mm:ss.fffK}"); ApplyRfc3339DateFormattingIfNeeded(htmlHelper, @"{0:yyyy-MM-ddTHH\:mm\:ss.fffK}");
return GenerateTextBox(htmlHelper, inputType: "text"); return GenerateTextBox(htmlHelper, inputType: "text");
} }
public static IHtmlContent DateTimeLocalInputTemplate(IHtmlHelper htmlHelper) public static IHtmlContent DateTimeLocalInputTemplate(IHtmlHelper htmlHelper)
{ {
ApplyRfc3339DateFormattingIfNeeded(htmlHelper, "{0:yyyy-MM-ddTHH:mm:ss.fff}"); ApplyRfc3339DateFormattingIfNeeded(htmlHelper, @"{0:yyyy-MM-ddTHH\:mm\:ss.fff}");
return GenerateTextBox(htmlHelper, inputType: "datetime-local"); return GenerateTextBox(htmlHelper, inputType: "datetime-local");
} }
@ -366,7 +366,7 @@ namespace Microsoft.AspNetCore.Mvc.ViewFeatures.Internal
public static IHtmlContent TimeInputTemplate(IHtmlHelper htmlHelper) public static IHtmlContent TimeInputTemplate(IHtmlHelper htmlHelper)
{ {
ApplyRfc3339DateFormattingIfNeeded(htmlHelper, "{0:HH:mm:ss.fff}"); ApplyRfc3339DateFormattingIfNeeded(htmlHelper, @"{0:HH\:mm\:ss.fff}");
return GenerateTextBox(htmlHelper, inputType: "time"); return GenerateTextBox(htmlHelper, inputType: "time");
} }

View File

@ -1190,7 +1190,7 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
tagHelper.For.ModelExplorer, tagHelper.For.ModelExplorer,
tagHelper.For.Name, tagHelper.For.Name,
null, // value null, // value
"{0:yyyy-MM-ddTHH:mm:ss.fffK}", @"{0:yyyy-MM-ddTHH\:mm\:ss.fffK}",
htmlAttributes)) // htmlAttributes htmlAttributes)) // htmlAttributes
.Returns(tagBuilder) .Returns(tagBuilder)
.Verifiable(); .Verifiable();
@ -1213,20 +1213,20 @@ namespace Microsoft.AspNetCore.Mvc.TagHelpers
[InlineData("Date", Html5DateRenderingMode.CurrentCulture, "{0:d}", "date")] // Format from [DataType]. [InlineData("Date", Html5DateRenderingMode.CurrentCulture, "{0:d}", "date")] // Format from [DataType].
[InlineData("Date", Html5DateRenderingMode.Rfc3339, "{0:yyyy-MM-dd}", "date")] [InlineData("Date", Html5DateRenderingMode.Rfc3339, "{0:yyyy-MM-dd}", "date")]
[InlineData("DateTime", Html5DateRenderingMode.CurrentCulture, null, "datetime-local")] [InlineData("DateTime", Html5DateRenderingMode.CurrentCulture, null, "datetime-local")]
[InlineData("DateTime", Html5DateRenderingMode.Rfc3339, "{0:yyyy-MM-ddTHH:mm:ss.fff}", "datetime-local")] [InlineData("DateTime", Html5DateRenderingMode.Rfc3339, @"{0:yyyy-MM-ddTHH\:mm\:ss.fff}", "datetime-local")]
[InlineData("DateTimeOffset", Html5DateRenderingMode.CurrentCulture, null, "text")] [InlineData("DateTimeOffset", Html5DateRenderingMode.CurrentCulture, null, "text")]
[InlineData("DateTimeOffset", Html5DateRenderingMode.Rfc3339, "{0:yyyy-MM-ddTHH:mm:ss.fffK}", "text")] [InlineData("DateTimeOffset", Html5DateRenderingMode.Rfc3339, @"{0:yyyy-MM-ddTHH\:mm\:ss.fffK}", "text")]
[InlineData("DateTimeLocal", Html5DateRenderingMode.CurrentCulture, null, "datetime-local")] [InlineData("DateTimeLocal", Html5DateRenderingMode.CurrentCulture, null, "datetime-local")]
[InlineData("DateTimeLocal", Html5DateRenderingMode.Rfc3339, "{0:yyyy-MM-ddTHH:mm:ss.fff}", "datetime-local")] [InlineData("DateTimeLocal", Html5DateRenderingMode.Rfc3339, @"{0:yyyy-MM-ddTHH\:mm\:ss.fff}", "datetime-local")]
[InlineData("Time", Html5DateRenderingMode.CurrentCulture, "{0:t}", "time")] // Format from [DataType]. [InlineData("Time", Html5DateRenderingMode.CurrentCulture, "{0:t}", "time")] // Format from [DataType].
[InlineData("Time", Html5DateRenderingMode.Rfc3339, "{0:HH:mm:ss.fff}", "time")] [InlineData("Time", Html5DateRenderingMode.Rfc3339, @"{0:HH\:mm\:ss.fff}", "time")]
[InlineData("Month", Html5DateRenderingMode.CurrentCulture, "{0:yyyy-MM}", "month")] [InlineData("Month", Html5DateRenderingMode.CurrentCulture, "{0:yyyy-MM}", "month")]
[InlineData("Month", Html5DateRenderingMode.Rfc3339, "{0:yyyy-MM}", "month")] [InlineData("Month", Html5DateRenderingMode.Rfc3339, "{0:yyyy-MM}", "month")]
[InlineData("Week", Html5DateRenderingMode.CurrentCulture, null, "week")] [InlineData("Week", Html5DateRenderingMode.CurrentCulture, null, "week")]
[InlineData("Week", Html5DateRenderingMode.Rfc3339, null, "week")] [InlineData("Week", Html5DateRenderingMode.Rfc3339, null, "week")]
[InlineData("NullableDate", Html5DateRenderingMode.Rfc3339, "{0:yyyy-MM-dd}", "date")] [InlineData("NullableDate", Html5DateRenderingMode.Rfc3339, "{0:yyyy-MM-dd}", "date")]
[InlineData("NullableDateTime", Html5DateRenderingMode.Rfc3339, "{0:yyyy-MM-ddTHH:mm:ss.fff}", "datetime-local")] [InlineData("NullableDateTime", Html5DateRenderingMode.Rfc3339, @"{0:yyyy-MM-ddTHH\:mm\:ss.fff}", "datetime-local")]
[InlineData("NullableDateTimeOffset", Html5DateRenderingMode.Rfc3339, "{0:yyyy-MM-ddTHH:mm:ss.fffK}", "text")] [InlineData("NullableDateTimeOffset", Html5DateRenderingMode.Rfc3339, @"{0:yyyy-MM-ddTHH\:mm\:ss.fffK}", "text")]
public async Task ProcessAsync_CallsGenerateTextBox_AddsExpectedAttributesForRfc3339( public async Task ProcessAsync_CallsGenerateTextBox_AddsExpectedAttributesForRfc3339(
string propertyName, string propertyName,
Html5DateRenderingMode dateRenderingMode, Html5DateRenderingMode dateRenderingMode,