Скрытие значения по умолчанию для даты
Моя модель просмотра:
public partial class FileTransferFilterCriteriaViewModel
{
public string Fice { get; set; }
public string SourceEmail { get; set; }
public string TargetEmail { get; set; }
public DateTime FromDate { get; set; }
public DateTime ToDate { get; set; }
public string Status { get; set; }
public string Category { get; set; }
}
(Ничего не приходит из БД.)
Мой контроллер:
return View(new FileTransferFilterCriteriaViewModel())
Вот что отображается для обоих FromDate
а также ToDate
:
1/1/0001 12:00:00 AM
Мой HTML:
@Html.TextBoxFor(x =>x.Criteria.FromDate)
Вопросы:
- Если дата
null
Как я могу подавить отображение значения даты по умолчанию? - Если дата не
null
как я могу отформатировать дату какMM/dd/yyyy
?
3 ответа
Используйте дату, которую можно обнулять в вашей ViewModel:
public DateTime? FromDate { get; set; }
Я создал шаблон редактора, и это работает для меня.
Изменения для просмотра модели:
[UIHint(UiHintConstants.DateCalendar)]
public DateTime? FromDate { get; set; }
[UIHint(UiHintConstants.DateCalendar)]
public DateTime? ToDate { get; set; }
После этого в папке Views/Shared/EditorTemplate создается шаблон редактора с именем DateCalendar.chtml:
@using System.Globalization
@model DateTime?
@Html.TextBox("", (Model.HasValue && !Model.Value.ToString(CultureInfo.InvariantCulture).Contains("1900") && !Model.Value.ToString(CultureInfo.InvariantCulture).Contains("0001") ? Model.Value.ToString("MM/dd/yyyy") : string.Empty), new { @class = "datePicker", maxlength = "12", size = "12" })
а затем использовал его как:
@Html.EditorFor(x =>x.FromDate)
@Html.EditorFor(x => x.ToDate)
и вот исходный код:
<input class="datePicker" id="Criteria_FromDate" maxlength="12" name="Criteria.FromDate" size="12" type="text" value="" />
<input class="datePicker" id="Criteria_ToDate" maxlength="12" name="Criteria.ToDate" size="12" type="text" value="" />
Надеюсь, это поможет кому-то еще.
Я не мог понять одну часть, хотя, перемещая размер и maxlenth из шаблона. В этом случае это не актуально, но может стать в некоторых других случаях, например, где я могу заблокировать текстовое поле или не захотеть календарь jquery. Я отправлю, как только у меня будет справка об этом.
Все работает отлично. Вы не извлекаете какие-либо данные из базы данных (о чем свидетельствует передача только что созданной модели представления) return View(new FileTransferFilterCriteriaViewModel())
). Вы должны рассмотреть возможность сделать это внутри метода действия вашего контроллера. Чтобы получить более короткий формат даты, используйте @Html.TextBoxFor(x =>x.Criteria.FromDate.ToShortDateString())