我正在尝试编写一个自定义字段来表示花费在任务上的时间。该字段派生自 NumberField (数字代表分钟),但我想在列表中将其显示为 HH:MM ,为此我试图覆盖休闲功能:
protected override void RenderFieldForDisplay(System.Web.UI.HtmlTextWriter output)
{
Label timeSpan = new Label();
timeSpan.Text = ((int)this.Value / 60).ToString() + ":" + ((int)this.Value % 60).ToString();
timeSpan.RenderControl(output);
//base.RenderFieldForDisplay(timeSpan.RenderControl());
}
我不是 ASP.NET 开发人员,所以我试图避免定义 DisplayTemplate。
你能告诉我如何以编程方式呈现它,或者只是把我推向正确的方向吗?
解决方案
在 Kusek 回答的帮助下解决了。在 fldtypes_HourField.xml 中:
<RenderPattern Name="DisplayPattern">
<HTML><![CDATA[<div align='right'>]]></HTML>
<Switch>
<Expr>
<Column />
</Expr>
<Case Value="" />
<Default>
<HTML><![CDATA[<script src="/_layouts/hourField.js"></script>]]></HTML>
<HTML><![CDATA[<div><SCRIPT>formatHourField("]]></HTML>
<Column />
<HTML><![CDATA[");</SCRIPT></div>]]></HTML>
</Default>
</Switch>
</RenderPattern>
还有 hourField.js
function formatHourField(t) {
var m = t % 60;
var h = (t - m)/ 60;
document.write(h + ":" + m);
}
记住我之前尝试过的 - 这个解决方案看起来非常简单:)