Формат дд / мм / гггг не работает в ASP.NET Core - PullRequest
1 голос
/ 05 июня 2019

Я изо всех сил пытаюсь получить правильный формат даты в ASP.NET Core 2.1.У меня уже есть несколько решений на несколько часов, и я просто не могу заставить их работать.Вещи, которые я пробовал до сих пор:

  • Настройка культуры в Startup.cs ConfigureServices class:

    // Add localization
    services.AddLocalization(options => options.ResourcesPath = "Resources");
    
    services.Configure<RequestLocalizationOptions>(
    opts =>
    {
        var supportedCultures = new List<CultureInfo>
        {
    
                new CultureInfo("nl-NL"),
        };
    
        opts.DefaultRequestCulture = new RequestCulture("nl-NL");
        // Formatting numbers, dates, etc.
        opts.SupportedCultures = supportedCultures;
        // UI strings that we have localized.
        opts.SupportedUICultures = supportedCultures;
        opts.DefaultRequestCulture = new RequestCulture(culture: "nl-NL", uiCulture: "nl-NL");
    });
    
    Thread.CurrentThread.CurrentCulture = new CultureInfo("nl-NL");
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("nl-NL");
    
  • Настройка культуры вStartup.cs Configure класс:

    var supportedCultures = new[] { new CultureInfo("nl-NL") };
    app.UseRequestLocalization(new RequestLocalizationOptions
    {
        DefaultRequestCulture = new RequestCulture("nl-NL"),
        SupportedCultures = supportedCultures,
        SupportedUICultures = supportedCultures
    });
    
    Thread.CurrentThread.CurrentCulture = new CultureInfo("nl-NL");
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("nl-NL");
    
  • Аннотация данных в модели представления и нормальной модели, сначала свойство было DateTime, но оно также не работало:

    [DisplayName("Datum van machtiging")]
    [Required(ErrorMessage = "Het veld '{0}' is verplicht")]
    [DataType(DataType.Date), DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    public string Datum_van_machtiging { get; set; }
    
  • HTML-код, по которому он вызывается (если это имеет значение):

    <div class="form-group">
        <label asp-for="Datum_van_machtiging" class="control-label"></label>
        <input asp-for="Datum_van_machtiging" class="form-control" />
        <span asp-validation-for="Datum_van_machtiging" class="text-danger"></span>
    </div>
    
  • Установите правильную глобализацию для IIS express как Iопубликовать его в IIS.IIS globalization

  • Мои program.cs (если это важно, потому что я публикую в локальном IIS.)

    public class Program
    {
        public static void Main(string[] args)
        {
           BuildWebHost(args).Run();
        }
    
        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseUrls(@"http://0.0.0.0:5000")
                .UseIISIntegration()
                .UseEnvironment("Production")
                .UseStartup<Startup>()
                .Build();
    }
    

РЕДАКТИРОВАТЬ: Кстати, я тоже получаю это предупреждение: http://prntscr.com/nxu1d6

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Почему вы используете строку в поле Datum_van_machtiging?Вы можете попробовать:

public Datetime Datum_van_machtiging { get; set; }
0 голосов
/ 05 июня 2019

Вы делаете это при запуске:

Thread.CurrentThread.CurrentCulture = new CultureInfo("nl-NL");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("nl-NL");

Это, вероятно, не то, что вы хотите сделать, так как это будет делать это при запуске потока, запущенного при запуске, и вы, вероятно, не будете делать ничего определенного для этой культуры.Т.е. это не повлияет на потоки, выполняющие ваши запросы.Если вы хотите использовать только одну культуру, попробуйте вместо этого

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("nl-NL");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("nl-NL");

Возможно, я не совсем правильно понял, в чем ваша проблема, так как вы не указали, что именно идет не так, а где нетне поймите свою дату неправильно.Эти настройки влияют на специфические для культуры операции, такие как преобразование чисел в строки и то, какие файлы ресурсов читаются.

Если ваша проблема связана с вводом HTML (что не совсем понятно из вашего вопроса), то лучшее, что вы можете сделать, этоиспользовать формат ISO из JavaScript, который C # понимает достаточно хорошо.Например, 2019-06-01.Тогда вам не нужно ничего дополнительного для преобразования в конкретную культуру.

Я бы также проверил валидацию этого формата ISO, чтобы быть уверенным, что невозможно отправить дату в произвольном формате, который C # может или не можетслучайно понимать в зависимости от культуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...