如何从aspx文件调用扩展函数而不是文件后面的代码

时间:2010-08-11 13:47:46

标签: c# asp.net

我想调用一个从hexa表示返回颜色的函数。怎么做。

这是我的代码

<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,因为它返回字符串。 我创建了一个扩展,它给出了Color并应用于字符串。 如何在这里使用它。

此功能位于页面所在的其他命名空间下。

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

如果我尝试调用ToColor

,则出现错误

'string'不包含'ToColor'的定义,也没有扩展方法'ToColor'接受类型'string'的第一个参数(你是否缺少using指令或汇编引用?)

2 个答案:

答案 0 :(得分:4)

如果ToColor()与当前页面的名称空间不同,则必须从aspx页面的顶部引用它。

<%@ Import Namespace="ShantanuGupta" %>

答案 1 :(得分:0)

Eval会返回一个对象,因此您的扩展方法无法像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>