Страницы

Поиск по вопросам

понедельник, 16 декабря 2019 г.

Проблема с форматом даты при использовании tag-хелперов в ASP.NET Core 2 VS2017

#c_sharp #aspnet #aspnet_core #netcore20


Добрый день. 

Есть код для ввода параметров фильтрации (делал согласно статье). Всё прекрасно работало
пока не столкнулся с необходимостью делать фильтрацию по временному интервалу.


Ответы

Ответ 1



ASP.NET MVC не всегда использует текущую культуру при парсинге значений, пришедших от клиента. Контроллер может получать значение из трех различных источников: RouteData - данные роутинга URI query string - параметры, переданные в URL при GET-запросе Request form - данные, переданные внутри запроса при POST-запросе. Текущая культура используется только при парсинге Request form. Значения из RouteData и query string всегда обрабатываются как строки в invariant culture. Это сделано из соображений переносимости URL. Например, вы отправите URL с датами в фильтре знакомому, который сидит под английской локалью - он будет ожидать, что ссылка откроется корректно, и подхватит те же значения. Поэтому сервер парсит значения из query string без учета текущей культуры, в en-US, и разворачивает дату и месяц. Возможных решений несколько: Для форм: Использовать POST, а не GET. При этом параметры фильтрации не будут попадать в URL. Стоит использовать, если нет необходимости поддерживать прямые ссылки на URL фильтров. Использовать GET, но на стороне контроллера принимать string, а не DateTime. Преобразовывать string в DateTime в текущей локали. Такие ссылки можно будет добавить в закладки, но при смене локали они перестанут работать. Комбо: Использовать POST, но в ответ на него отдавать редирект на адрес с cultureinvariant параметрами в URL. Данные дойдут до сервера за счет POST, а сформированные при обработке POST ссылки будут всегда содержать данные в invariant culture и будут валидными на любой машине в качестве параметров при GET. Для ссылок (

Комментариев нет:

Отправить комментарий