2010-08-11 25 views
2

我想調用一個函數,該函數從六次表示中返回顏色。怎麼做。如何從aspx文件調用擴展功能,而不是文件後面的代碼

這裏是我的代碼

<asp:Label ID="Label1" runat="server" Text='<%# Eval("Status") %>' BackColor='<%# Eval("ColorCode") %>'></asp:Label>

我想這樣調用它

<asp:Label ID="Label1" runat="server" Text='<%# Eval("Status") %>' BackColor='<%# Eval("ColorCode").ToString().ToColor() %>'></asp:Label>

目前,它顯示了一個錯誤InvalidCastException的,因爲它返回的字符串。 我已經創建了一個給出顏色並適用於字符串的擴展。 如何在這裏使用它。

該函數位於頁面所在的其他名稱空間下。

public static Color ToColor(this string originalColor) 
    { 
     return ColorTranslator.FromHtml(originalColor); 
    } 

以下是錯誤如果我試圖調用ToColor

「字符串」中不包含關於「ToColor」和沒有擴展方法「ToColor」接受類型「字符串」的第一個參數定義可以找到(您是否缺少使用指令或程序集引用?)

+0

我從來沒有嘗試過,但嘗試的eval(「ColorCode.ToColor」) – garik 2010-08-11 13:52:28

回答

4

如果ToColor()位於與當前頁面不同的命名空間中,則必須從aspx頁面的頂部引用它。

<%@ Import Namespace="ShantanuGupta" %> 
0

評估和演示返回一個對象,所以你的擴展方法是行不通的,因爲它是在string,不object

您可以:

  • 更改擴展方法,以便它在object工作,這是一個糟糕的想法,因爲不是所有的對象都是顏色。
  • 在您的代碼後面添加一個名爲ToColor的新函數並調用該函數。

例如

// In codebehind 
protected Color ToColor(object originalColor) 
{ 
    return ColorTranslator.FromHtml(Convert.ToString(originalColor)); 
} 

//in markup 

<asp:Label ID="Label1" runat="server" Text='<%# Eval("Status") %>' BackColor="<%# ToColor(Eval("ColorCode")) %>"></asp:Label> 
+0

不是所有的字符串顏色要麼 – BoomTownTech 2010-08-11 14:05:50

+0

@湯姆,這就是爲什麼我沒有做它的擴展方法。 – Rob 2010-08-11 14:12:04

+0

@Tom,Rob:如果我在數據庫中存儲字符串或NULL,該怎麼辦?在那種情況下它將如何表現。 – 2010-08-11 14:17:15

相關問題