asp.net mvc — установка локали/формата параметра DateTime

Я использую средство выбора даты и времени загрузки, чтобы пользователь мог ввести дату, как показано ниже:

<div class="form-group">
    <label for="end">Start date:</label><br />
    <div class='input-group date' id='dt1'>
        @Html.TextBox("StartDateFilter", null, new { @class = "form-control" })
        <span class="input-group-addon">
            <span class="glyphicon glyphicon-calendar"></span>
        </span>
    </div>
</div>

<script type="text/javascript">
    $('#dt1').datetimepicker({
        format: 'L',
        locale: 'en-GB'
    });
</script>

Затем эта дата берется в качестве параметра в следующей сигнатуре метода:

public ActionResult Index(string sortOrder, string sortBy, string currentFilter, string searchString, string filterType, int? itemDisplay, int? page, DateTime? startDateFilter, DateTime? endDateFilter)

Однако дата в текстовом поле отображается как ДД/ММ/ГГГГ, но передается как ММ/ДД/ГГГГ, что вызывает несколько ошибок форматирования и ошибок синтаксического анализа. Как я могу изменить формат или локальный формат объектов DateTime, которые находятся в параметрах, на DD/MM/YYYY.

Я уже добавил следующее в свой файл web.config в system.web:

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

Заранее спасибо.


person James    schedule 04.01.2016    source источник


Ответы (2)


вы можете использовать это

ОБНОВЛЕНО

глобальный.asax

    protected void Application_Start()
    {
        GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings =
          new JsonSerializerSettings
      {
         DateFormatHandling = DateFormatHandling.IsoDateFormat,
         DateTimeZoneHandling = DateTimeZoneHandling.Unspecified,
         Culture = CultureInfo.GetCultureInfo("en-GB")
      };

         Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
    }
person Zergling    schedule 04.01.2016
comment
Я только что попытался добавить это в файл global.asax и получаю: «GlobalConfiguration» не существует в текущем контексте. Любые идеи, как это исправить? - person James; 04.01.2016
comment
Спасибо, я думал это System.Web.Http. Просто пытаюсь установить для него пакет, но он по какой-то причине не устанавливается, думаю, это ошибка сервера, поэтому я попробую еще раз через несколько минут и проверю этот ответ. Я дам вам знать, как я поживаю. - person James; 04.01.2016
comment
После 17 попыток мне удалось установить пакет, ха-ха, не знаю, что у меня сегодня с интернетом! К сожалению, это не решило мою проблему. Дата по-прежнему передается как ММ/ДД/ГГГ и, таким образом, форматируется неправильно, а при использовании дня, который превышает 12, это передается как нуль. - person James; 04.01.2016
comment
у меня была такая же проблема, как у вас, это помогло мне, я понятия не имею, что происходит с вашим - person Zergling; 04.01.2016
comment
После 10 часов я наконец пришел к решению. Я передал дату в виде строки. Затем проверил, было ли оно нулевым или пустым, когда пользователь не вводил фильтр. Преобразовал его в дату и заставил формат быть в Великобритании, а затем использовал эту новую локальную переменную datetime для сравнения с моделью. Возможно, это не лучший способ, но он работает! - person James; 05.01.2016

Используйте метод DateTime.ParseExact для форматирования даты ввода в вашем методе следующим образом:

DateTime sDate = DateTime.ParseExact(startDateFilter.ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);

DateTime eDate = DateTime.ParseExact(endDateFilter.ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);

это то, чего ты хочешь?

person Shaher Jamal Eddin    schedule 04.01.2016
comment
Спасибо за ваш вклад, но я не понимаю, как это поможет? Это просто изменит отображение средства выбора даты и времени на французский стандарт. - person James; 04.01.2016
comment
Еще раз спасибо, но это все еще не совсем то, что мне нужно. Это позволит вам изменить формат DateTime ПОСЛЕ его передачи, но мне нужно изменить его раньше. - person James; 04.01.2016