Десятичное поле должно быть числом в .net core 2.2 - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть известная проблема с десятичными типами данных и ошибка «Имя поля должно быть числом».Я занимаюсь разработкой веб-приложения ASP.NET в .NET Core 2.2 с помощью c #.

. Ниже приведен пример модели:

    public DateTime? ValidTo { get; set; }
    public decimal? TimeZone { get; set; }
    public int? Idwfstate { get; set; }

, а фрагмент cshtml выглядит следующим образом:

    <div class="form-group">
            <label asp-for="item.TimeZone" class="control-label"></label>
            <input asp-for="item.TimeZone" class="form-control" />
            <span asp-validation-for="item.TimeZone" class="text-danger"></span>
    </div>

После включения глобализации для плагина проверки jquery и размещения следующего кода в файле startup.cs:

        var defaultCulture = new CultureInfo("us-UK");
        var localizationOptions = new RequestLocalizationOptions
        {
            DefaultRequestCulture = new RequestCulture(defaultCulture),
            SupportedCultures = new List<CultureInfo> { defaultCulture },
            SupportedUICultures = new List<CultureInfo> { defaultCulture }
        };
        app.UseRequestLocalization(localizationOptions);

проблема не устранена.

Есть предложения?Спасибо.

1 Ответ

1 голос
/ 27 сентября 2019

Если вы хотите локализовать сообщения об ошибках привязки базовой модели ASP.NET, выполните следующие действия:

  1. Создать файл ресурса - Создать файл ресурса в Resources папку в вашем решении и назовите файл ModelBindingMessages.fa.resx.

  2. Добавить ключи ресурса - Откройте файл ресурса и добавьте ключи и значения, которые вы хотите использовать длялокализация сообщений об ошибках.Я использовал ключи и значения, как на картинке ниже: enter image description here

  3. Настройка параметров - В методе ConfigureServices, при добавлении Mvc, настройте его параметры для установки средств доступа к сообщениям для ModelBindingMessageProvider:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddLocalization(options => { options.ResourcesPath = "Resources";});
    
        services.AddMvc(options =>
        {
            var F = services.BuildServiceProvider().GetService<IStringLocalizerFactory>();
            var L = F.Create("ModelBindingMessages", "RazorPages2_2Test");
            options.ModelBindingMessageProvider.SetValueIsInvalidAccessor(
                (x) => L["The value '{0}' is invalid."]);
            options.ModelBindingMessageProvider.SetValueMustBeANumberAccessor (
                (x) => L["The field {0} must be a number."]);
    
        } )
            .AddDataAnnotationsLocalization()
            .AddViewLocalization()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
     }
    

    Текущая культура запроса настроена в промежуточном программном обеспечении локализации.Промежуточное программное обеспечение для локализации включено в методе Startup.Configure.Промежуточное программное обеспечение для локализации должно быть настроено перед любым промежуточным программным обеспечением, которое может проверять культуру запросов (например, app.UseMvcWithDefaultRoute()).

       var supportedCultures = new[] { new CultureInfo("en"), new CultureInfo("fa") };
        app.UseRequestLocalization(new RequestLocalizationOptions()
        {
            DefaultRequestCulture = new RequestCulture(new CultureInfo("en")),
            SupportedCultures = supportedCultures,
            SupportedUICultures = supportedCultures
        });
    

Ссылка:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-2.2#implement-a-strategy-to-select-the-languageculture-for-each-request

https://stackoverflow.com/a/41669552/10201850

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