Как редактировать значение даты с форматом типа даты в начальной загрузке

У меня есть эти коды, но тогда значение, отображаемое в окне редактирования, равно "мм / дд / гггг"

@Html.TextBoxFor(m => m.StartDate, new { @Value = Model.StartDate.ToString("MM/dd/yyyy"), @placeholder= Model.StartDate.ToString("MM/dd/yyyy"), @class = "form-control", @type="date" })

Как мне добиться чего-то подобного, когда отображаемая дата - это значение из базы данных, а не "мм / дд / гггг"

1 ответ

Во-первых, не устанавливайте value приписывать напрямую. Бритва почти все равно проигнорирует это. Значение для связанного поля происходит из ModelState, который сам состоит из значений из Request, ViewBag/ViewData, а также Model, в этой последовательности. Так, например, если вы хотите StartDate по умолчанию "сегодня", тогда вы просто заполнили бы свою модель в действии, прежде чем вернуть представление:

model.StartDate = DateTime.Today;

Или, что еще лучше, вы можете автоматически изменить свойство класса вашей модели на значение по умолчанию: сегодня:

private DateTime? startDate;
public DateTime StartDate
{
    get { return startDate ?? DateTime.Today; }
    set { startDate = value; }
}

Просто имейте в виду, что если ваше действие происходит с параметром, как startDate или вы установили что-то вроде ViewBag.StartDateэти значения всегда будут иметь приоритет.

Во-вторых, вы используете HTML5 date тип ввода. В браузерах, которые поддерживают типы ввода HTML5, предоставленное значение для даты, времени или даты должно быть в формате ISO. На свидание это значит YYYY-MM-DD, Если значение не предоставлено таким образом, то браузер считает его мусором и отбрасывает его, оставляя элемент управления, как будто никакое значение не было предоставлено.

Кроме того, FWIW, вам не нужно ставить перед каждым членом вашего анонимного объекта префикс @, Технически это ничего не ранит, но это запах кода. @ существует префикс для экранирования ключевых слов языка. С classНапример, вы не можете использовать его напрямую, так как это ключевое слово, поэтому вы должны использовать @class вместо. Тем не менее, такие вещи, как placeholder а также type не являются ключевыми словами, и поэтому не нуждаются в @ префикс.

Другие вопросы по тегам