Значение по умолчанию в поле Sensenet DateTime
Когда поле DateTime оставлено пустым, Sensenet отображает (по умолчанию система) "01/01/01 12:00" в режиме просмотра содержимого. Может ли оно отображать значение, поскольку оно не было введено пользователями?
2 ответа
Вы также можете решить эту проблему с помощью кода на стороне сервера в вашем обработчике контента.
Если вы создаете новый DateTime
объект его значение по умолчанию 1/1/0001 12:00:00 AM
также указано как DateTime.MinValue
, DateTime.MaxValue
является 12/31/9999 11:59:59 PM
, Затем вы проверяете DateTime.MinValue
на форматирование адреса.
Если у вас есть контент, в котором вы будете много форматировать и отображать даты, в вашем определении типа контента (CTD) часто проще определить строковое поле, соответствующее полю даты. Например, ваш CTD может иметь такие поля:
<Field name="ReviewDate" type="DateTime" >
<DisplayName>Review Date</DisplayName>
</Field>
<Field name="ReviewDateStr" type="ShortText" >
<DisplayName>Review Date</DisplayName>
</Field>
Затем в обработчике контента вы создаете метод чтения только для чтения для отображения ReviewDate:
private const string REVIEWDATESTRPROPERTY = "ReviewDateStr";
[RepositoryProperty(REVIEWDATESTRPROPERTY, RepositoryDataType.String)]
public virtual string ReviewDateStr
{
get
{
if (ReviewDate == DateTime.MinValue)
{
return "n/a"; // Default string if date is not set.
}
return ReviewDate.ToString(); // Add date formatting here.
}
}
Кроме того, вы можете создать элемент управления поля, который делает то же самое.
Значение по умолчанию для поля DateTime не может быть пустым, поэтому, если вы хотите скрыть его в представлении "Обзор", вы можете использовать скрипт для проверки значений даты и времени, а если оно содержит 01.01.01, вы можете просто удалить / скрыть его с помощью js в браузере. Есть вспомогательная функция для форматирования дат (SN.Util.js 'setFriendlyLocalDate'), которая обрабатывает эту проблему со значением по умолчанию.