ASP.NET MVC Локализация или изменение сообщений об ошибках привязки модели по умолчанию - PullRequest
0 голосов
/ 30 декабря 2018

Как изменить язык для ошибки валидации «некоторое значение» недопустимо для «некоторого свойства»?

Кто-нибудь может помочь?Я хочу перевести ошибку на картинке на русский Ошибка .Я читаю много сайтов, пытаюсь использовать RegularExpression, но это не помогает, может быть, я не правильно понимаю, как это сделать?

Мне нужно только перевести ошибку, не нужно менять культуру.

В web.config:

<globalization culture="en" uiCulture="en" />

Моя сущность с даннымиатрибуты аннотаций:

public class Player
{
    /* Some other properties */

    [Required(ErrorMessage = "Укажите среднее количество блокшотов")]
    [Range(0, 10.0, ErrorMessage = "Недопустимое значение, до 10")]
    public float BlockPerGame { get; set; }

    /* Some other properties */
}

My View:

@using (Html.BeginForm())
{
    @Html.HiddenFor(m => m.Id)    
    <div class="box-form">

    /* Some other properties */

    <div class="text-style-roboto form-group">
        <label>Среднее количество блокшотов</label>
        @Html.TextBoxFor(m => m.BlockPerGame, new { @class = "form-control" })
        @Html.ValidationMessageFor(m => m.BlockPerGame)
    </div>

    /* Some other properties */

    <div class="form-group">
        <button type="submit" class="button button-create" id="button-create">Добавить</button>

        @Html.ActionLink("Отмена", "Index", null, new { @class = "button button-cancel", id = "button-cancel" })
    </div>
</div>
}

И мой контроллер:

public class AdminController : Controller
{
    /*Some other methods*/
    [HttpPost]
    public async Task<ActionResult> Edit(Player player, string ChoosingTeam)
    {
        if (ModelState.IsValid)
        {
            if (ChoosingTeam != string.Empty)
            {
                try
                {
                    player.TeamId = int.Parse(ChoosingTeam);
                    await repository.SavePlayerAsync(player);
                    TempData["message"] = string.Format("Игрок {0} {1} сохранены", player.Name, player.Surname);

                    return RedirectToAction("Index");
                }
                catch (Exception exc)
                {
                    Console.WriteLine(exc.Message);
                }
            }
        }
        IEnumerable<SelectListItem> list = new SelectList(repository.Teams, "Id ", "Name");
        ViewBag.ChoosingTeamName = list;
        return View(player);
    }
}

1 Ответ

0 голосов
/ 30 декабря 2018

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

Локализация или изменение сообщений об ошибках привязки модели по умолчанию

Сообщения об ошибках привязки модели отличаются от сообщений проверки модели.Чтобы настроить или локализовать их, вам нужно создать глобальный ресурс и зарегистрировать его в Application_Start для DefaultModelBinder.ResourceClassKey.

. Для этого выполните следующие действия:

  1. Перейти к Обозреватель решений
  2. Щелкните правой кнопкой мыши проект → Добавить Папка ASP.NET → Выберите App_GlobalResources
  3. Щелкните правой кнопкой мыши App_GlobalResources → Выберите Добавить новый элемент
  4. Выберите Файл ресурсов и установите имя ErrorMessages.resx
  5. В полях ресурсов добавьте следующие ключи и значения и сохраните файл:
    • PropertyValueInvalid: The value '{0}' is not valid for {1}.
    • PropertyValueRequired: A value is required.

Примечание: Если вы хотите просто настроить сообщения, вам не нужен какой-либо языковой ресурс, просто напишите пользовательские сообщения вErrorMessages.resx и пропустите следующий шаг.

Если вы хотите локализации, скопируйте файл ресурса для каждой культуры, вставьте его в ту же папку и переименуйте в ErrorMessages.xx-XX.resx .Вместо xx-XX используйте идентификатор культуры, например, fa-IR для персидского языка и введите перевод для этих сообщений, например, для ErrorMessages.fa-IR.resx :

  • PropertyValueInvalid: مقدار '{0}' برای '{1}' معتبر نمی باشد.
  • PropertyValueRequired: وارد کردن مقدار الزامی است.

Откройте Global.asax и в Application_Start, вставьте код:

DefaultModelBinder.ResourceClassKey = "ErrorMessages";

ASP.NET CORE

Для ASP.NET Core прочитайте этот пост: Сообщения об ошибках привязки модели ядра ASP.NETЛокализация .

...