Sensenet DateTime字段默认值

时间:2016-11-30 10:49:35

标签: sensenet

当DateTime字段留空时,Sensenet在内容浏览模式下显示(系统默认值)'01 / 01/01 12:00'。它没有显示任何值,因为它没有被用户输入吗?

2 个答案:

答案 0 :(得分:1)

DateTime字段的默认值不能为空,因此如果要在“浏览”视图中隐藏它,可以使用脚本检查日期时间值,如果它包含01/01/01,则只需使用js删除/隐藏它浏览器。有一个帮助函数来格式化日期(SN.Util.js'setFriendlyLocalDate'),它也用默认值处理这个问题。

答案 1 :(得分:1)

您也可以使用内容处理程序中的服务器端代码解决此问题。

如果您实例化新的DateTime对象,则其默认值为1/1/0001 12:00:00 AM,也指定为DateTime.MinValueDateTime.MaxValue12/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>

然后在内容处理程序中,创建一个只读getter以显示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.
    }
}

或者,您可以创建一个field control来做同样的事情。