powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как заставить валидатор в представлении "проглатывать" дату в русском формате дд.мм.гггг
6 сообщений из 6, страница 1 из 1
Как заставить валидатор в представлении "проглатывать" дату в русском формате дд.мм.гггг
    #39715426
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имею поле в БД (или классе) типа DateTime. При вводе даты в обычном русском форма-те типа «26.11.2018» валидатор в представлении ругается, что это не дата (см. рисунок). Понимает лишь нестандартные варианты типа «26/11/2018» или «26-11-2018». Знаю, что в контроллере эта ситуация исправляется следующим образом:
Код: html
1.
2.
3.
4.
using System.Globalization;
………………………………………...................................
CultureInfo cultureRu = new CultureInfo("ru-Ru");
subMain.ДатаРождения = Convert.ToDateTime("25.07.1987", cultureRu);



Однако валидатор в представлении срабатывает ещё ДО отправки информации на сервер/в контроллер. И как тут быть? Куда засунуть эту глобализацию?

Вот фрагмент кода представления, а на рисунке ниже результат:
Код: html
1.
2.
3.
4.
5.
6.
7.
<div class="form-group">
     @Html.LabelFor(model => model.BirthDate, htmlAttributes: new { @class = "control-label col-md-2" })
     <div class="col-md-4">
          @Html.EditorFor(model => model.BirthDate, new { htmlAttributes = new { @class = "form-control" } })
          @Html.ValidationMessageFor(model => model.BirthDate, "", new { @class = "text-danger" })
    </div>
</div>



Подозреваю, что это можно прописать в каком-нибудь конфиге, но где и как не знаю.
Можно, конечно, объехать эту ситуацию на «кривой козе», но хотелось бы понять в чём тут загвоздка.
С уважением ВВГ
...
Рейтинг: 0 / 0
Как заставить валидатор в представлении "проглатывать" дату в русском формате дд.мм.гггг
    #39715443
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValGer,

дополнение к предыдущему - рисунок
...
Рейтинг: 0 / 0
Как заставить валидатор в представлении "проглатывать" дату в русском формате дд.мм.гггг
    #39715447
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
результаты гугления уже были изучены?
https://yandex.ru/search/?text=asp net mvc validation localization date
...
Рейтинг: 0 / 0
Как заставить валидатор в представлении "проглатывать" дату в русском формате дд.мм.гггг
    #39716511
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro,

Конечно, с этого я и начинал. Но ни в моих поисках, ни в вашей ссылке ничего путного не нашёл. Поэтому пришлось изобретать ту самую "кривую козу", на которой я и объехал данную проблему. Она достаточно простая и заключается в том, что в представлении просто отменяем валидацию данного поля с датой оператором @{ Html.EnableClientValidation(false); } и переносим её в контроллер. Фрагмент кода представлен ниже:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
            
<div class="form-group">
        @Html.LabelFor(model => model.BirthDate, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-4">
               @{
                      Html.EnableClientValidation(false);
                  }
               @Html.EditorFor(model => model.BirthDate, new { htmlAttributes = new { @class = "form-control" } })
               @Html.ValidationMessageFor(model => model.BirthDate, "", new { @class = "text-danger" })
        </div>
</div>



Код простейшего контроллера:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        [HttpPost]
        public ActionResult Index(DateTest dTest)
        {
            if (!ModelState.IsValid)    // Можно опустить
            {
                // ........................................
                // Что-нибудь делаем, если нужно
                // ........................................
            };

            return View(dTest);
        }



На всякий случай привожу код класса DateTest:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
    
    public class DateTest
    {
        public string Name { get; set; }

        [DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)]
        [DataType(DataType.Date)]               // Дата без времени
        public DateTime BirthDate { get; set; }
    }



Теперь, при корректном задании даты строка в формате дд.мм.гггг проглатывается нормально, а при ошибке - эта ошибка ловится стандартным образом (см. рисунок)
...
Рейтинг: 0 / 0
Как заставить валидатор в представлении "проглатывать" дату в русском формате дд.мм.гггг
    #39716847
ValGer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValGer,

Пожалуй, от атрибута
Код: c#
1.
[DataType(DataType.Date)]

целесообразно отказаться - вполне хватает и формата для того, чтобы отсечь время. На реальной задаче этот атрибут препятствует записи в базу данных. Без него всё в порядке.
...
Рейтинг: 0 / 0
Как заставить валидатор в представлении "проглатывать" дату в русском формате дд.мм.гггг
    #39717210
Kykapa4a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Довольно просто решил эту проблему установкой в проект NuGet пакета jQuery.Validation.Globalize.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как заставить валидатор в представлении "проглатывать" дату в русском формате дд.мм.гггг
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]