2011-04-04 110 views
0
<asp:Repeater runat="server" ID="QuestionList"> 
     <ItemTemplate> 
      <tr align="center"> 
       <td><a href="HelpViewTicket.aspx?ID=<%# DataBinder.Eval(Container.DataItem, "ID") %>"><%# DataBinder.Eval(Container.DataItem, "ID") %></a></td> 
       <td><a href="HelpViewTicket.aspx?ID=<%# DataBinder.Eval(Container.DataItem, "ID") %>"><%# DataBinder.Eval(Container.DataItem, "Subject")%></a></td> 
       <td><abbr class="timeago" title="2008-07-17T09:24:17Z"><%# CommonFunctions.NiceDateTime(DataBinder.Eval(Container.DataItem, "DateSubmitted"))%></abbr></td> 
       <td></td>      
       <td><%# DataBinder.Eval(Container.DataItem, "Priority")%></td> 
      </tr> 
     </ItemTemplate> 
    </asp:Repeater> 

我的中继器工作正常,但如何通过传递函数来格式化数据?例如:ASP.net中继器问题

CommonFunctions.NiceDateTime(DataBinder.Eval(Container.DataItem, "DateSubmitted")) 

由于容器在当前上下文中不存在,因此不起作用。

+0

不应该是一个问题。如果您只是将该呼叫移除到您的外部功能,该怎么办?它工作吗? – gbs 2011-04-04 16:29:37

回答

1

它的确如此。一个ItemTemplate内的以下工作对我来说:

<%# Server.HtmlEncode((Container.DataItem as YourFancyDataSetType).Description) %> 

当然,“YourFancyDataSetType”可以是任何类型。只需将当前DataItem转换/转换为基础类型并将其赋予您可能喜欢的任何函数。

@Edit:错别字

1

首先,我想你可以只使用<%# Eval("ID") %>作为<%# DataBinder.Eval(Container.DataItem, "ID") %>一个快捷方式,它可以清理你的代码很多。不应该有任何问题将Eval的结果传递给方法,Eval应该在传入之前进行评估。我相信它会作为对象或字符串传入;我已经做了几年了。