我正在尝试编写一个表示任务花费时间的自定义字段。该字段派生自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);
}
考虑到我以前尝试过的东西 - 这个解决方案看起来非常简单:)
答案 0 :(得分:1)
“所有项目”视图中呈现的值不基于模板或控件。它是从
呈现的 <RenderPattern Name="DisplayPattern">
<Switch>
<Expr><Column /></Expr>
<Case Value="" />
<Default>
<Column SubColumnNumber="1" HTMLEncode="TRUE" />
<HTML><![CDATA[, ]]></HTML>
<Column SubColumnNumber="0" HTMLEncode="TRUE" />
</Default>
</Switch>
</RenderPattern>
您已定义的字段架构的标记。显示模板定义在Disp表单中显示方式的外观。希望这会有所帮助。
在CAML表示中获取格式会有点麻烦。 您可以获得有关主题here
的一些信息