1

我正在尝试编写一个自定义字段来表示花费在任务上的时间。该字段派生自 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);
}

记住我之前尝试过的 - 这个解决方案看起来非常简单:)

4

1 回答 1

1

All Items 视图中呈现的值不基于模板或控件。它是从

    <RenderPattern Name="DisplayPattern">
  <Switch>
    <Expr><Column /></Expr>
    <Case Value="" />
    <Default>
      <Column SubColumnNumber="1" HTMLEncode="TRUE" />
      <HTML><![CDATA[,&nbsp;]]></HTML>
      <Column SubColumnNumber="0" HTMLEncode="TRUE" />
    </Default>
  </Switch>
</RenderPattern>

您已定义的字段架构的标记。显示模板 定义它在显示表单中的显示方式。希望这可以帮助。

在 CAML Representation 中获取您的格式会有点技巧。您可以在此处获得有关该主题的一些信息

于 2009-11-06T16:37:35.653 回答