Я использую Twitter Bootstrap Datepicker https://github.com/eternicode/bootstrap-datepicker в мое приложение MVC 5. Он подключен к текстовому полю в представлении под названием Selector.

Селектор просмотра

@model STAR.UI.ViewModels.ReportSelectorViewModel

<script>
    $(document).ready(function () {
        $('.datepicker').datepicker({
            autoclose: true,
            format: "dd/mm/yyyy",
            daysOfWeekDisabled: "5,6"
        });
    });
</script>

@Html.TextBoxFor(m => m.StartDate, new { @class = "datepicker" })

Когда пользователь выбирает дату, она отображается в текстовом поле в формате даты в Великобритании дд / мм / гггг. Это правильно. Затем пользователь может нажать кнопку отправки, которая отображает данные на другой странице. На этой странице есть кнопка возврата, которая возвращает пользователя в окно выбора, где он может выбрать другую дату. Однако я бы также хотел, чтобы, когда пользователь нажимает кнопку «Назад», его текущая выбранная дата также передавалась обратно в текстовое поле.

Кнопка "Назад"

@Html.ActionLink("<<< Go Back", "Selector", "Reports", new { startDate = Model.StartDate }, new { @class = "btn btn-outline btn-primary" })

Кнопка «Назад» передает выбранную дату начала обратно в действие селектора в моем контроллере, а затем я присваиваю это значение ViewModel, а затем ViewModel передается обратно в Selector View.

Действие переключателя (в контроллере)

public ActionResult Selector(DateTime? startDate)
{
  ReportSelectorViewModel model = new ReportSelectorViewModel();
  model.StartDate = startDate;
  return View(model);
}

Свойство StartDate в ReportSelectorViewModel имеет тип DateTime?

Проблема в том, что когда дата возвращается в текстовое поле, она имеет формат мм / дд / гггг вместо необходимого мне британского формата, то есть дд / мм / гггг.

Я пробовал поместить этот код над свойством StartDate в ReportSelectorViewModel, но это не помогает.

[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? StartDate { get; set; }

Может ли кто-нибудь помочь с этим?

Спасибо.

ОБНОВЛЕНИЕ

Мой обработанный HTML-код для StartDate

<div class="form-group">
<input class="datepicker" data-val="true" data-val-date="The field StartDate must be a date." data-val-required="Please select a Start Date" id="StartDate" name="StartDate" type="text" value="" />
<span class="field-validation-valid" data-valmsg-for="StartDate" data-valmsg-replace="true"></span>
</div>
0
tcode 5 Ноя 2014 в 15:19
Селектор действий - это метод публикации или получения?
 – 
theLaw
5 Ноя 2014 в 17:07

2 ответа

Лучший ответ

Folks

Это решило мою проблему, изменив объявление Html.TextBoxFor на это

@Html.TextBoxFor(model => model.StartDate, new { Value = Model.StartDate.HasValue ? Model.StartDate.Value.ToString("dd/MM/yyyy") : string.Empty, @class = "datepicker" })
0
tcode 5 Ноя 2014 в 17:10

Самый простой способ решить вашу проблему - установить глобальную культуру вашего сервера в Великобритании. Просто настройте свой файл web.config следующим образом:

<configuration>
    <system.web>
        <globalization uiCulture="en-GB" culture="en-GB" />
    </system.web>
</configuration>

Но эти настройки будут применены ко всем остальным пользователям. Лучше всего использовать настройки культуры пользователя, посмотрите здесь и работайте с датами в формате UTC.

0
Community 23 Май 2017 в 15:31
Спасибо за предложение, но это не решило мою проблему.
 – 
tcode
5 Ноя 2014 в 16:35