2009-07-14 88 views
4

我一直在尝试使用声明性数据绑定ASP.NET,并且在后台进行的“魔术”中挣扎。Eval与声明性数据绑定ASP.NET

我该怎么做才能在ASP.Net 2.0中工作。这是在一个数据绑定FormView控件中。

<asp:Label ID="RecipientsLabel" runat="server" 
    Text='<%# String.Join("; ", Eval("HtmlEncodedRecipients")) %>'> 
</asp:Label> 

注:HtmlEncodedRecipientsList<string>财产。

我得到这个错误:

The best overloaded method match for 'string.Join(string, string[])' has some invalid arguments

回答

3

尝试铸造Eval("HtmlEncodedRecipients")List并呼吁它.ToArray()

+0

脏劈;我喜欢它:) – Janie 2009-07-14 19:17:22

+0

谢谢乔尔。我曾尝试过其中一种,但不是同时尝试。 以下适用于我。不完全优雅,但它的作品。 Korey 2009-07-14 19:23:00

4

我发现如果您只是将DataItem转换为您期望的类型,生活会更容易。这使得intellisense踢了你,所以你可以看到发生了什么。

((MyObject)Container.DataItem).HtmlEncodedRecipients 
4

如果它是一个列表,那么这是你想要什么:

String.Join("; ", ((List<string>)Eval("HtmlEncodedRecipients")).ToArray()) 

(需要记住的是,如果你把一个eval中本身就是一个数据绑定字符串,它会拿出一个。“好”的值,显示但如果你在表达式中使用它,它返回一个类型的对象,所以你要投它

这是越来越有点太粗糙把直列,虽然如此,这样做:

Text =' <%#ConvertRecipients(EVAL( “HtmlEncodedRecipients”))%>'>

并在代码隐藏

string[] ConvertRecipients(object recipientObject) 
{ 
    if(recipientObject is List<string>) 
    { 
     ... 
+0

他想要一个字符串,而不是一个字符串[]作为结果,但否则这就是我所说的。如果您的参数是列表,它会不会为您解决? – 2009-07-14 19:33:56

+0

这是更好看,我最终使用。我不得不公开这个方法。我认为代码隐藏将是一个本地参考。它也是一个字符串,而不是一个字符串[]。 – Korey 2009-07-14 19:40:17