2009-07-14 87 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