2

我有一个作为参数 bool 的对象?

我需要在中继器上显示它。

<%# Eval("LS_Body_Connection") %>

我创建一个类

public static class BooleanExtensions
{
    public static string ToYesNoString(this bool value)
    {
        return value ? Resources.Yes : Resources.No;
    }
}

如何在中继器上使用它?

我试试

((bool)Eval("LS_Body_Connection")).ToYesNoString()

但它不承认

“bool”不包含“ToYesNoString”的定义,并且找不到接受“bool”类型的第一个参数的扩展方法“ToYesNoString”(您是否缺少 using 指令或程序集引用?)

在页面的cs中我可以调用扩展方法

当我添加

<%@ Import Namespace="IDD.App_Code" %>

我得到以下方法或属性之间的调用不明确:'IDD.App_Code.BooleanExtensions.ToYesNoString(bool?)' 和 'IDD.App_Code.BooleanExtensions.ToYesNoString(bool?)'

4

3 回答 3

5

尝试((bool)Eval("LS_Body_Connection")).ToYesNoString()

您需要导入如下命名空间作为克劳迪奥的答案

<%@ Import Namespace="My.Namespace.Containing.MyExtensions.Class" %>
于 2013-05-30T12:01:32.437 回答
3

尝试添加导入扩展方法所在的命名空间

<%@ Import Namespace="YourNameSpace" %>

正如@Damith 解释的那样,您还需要将Eval返回值转换为 bool 。

于 2013-05-30T11:57:14.440 回答
2

首先,您需要一个ToYesNoString接受参数的版本bool?,而不仅仅是bool参数。

public static string ToYesNoString(this bool? value)
{
    return value.HasValue ? ToYesNoString(value.Value) : null;
}

然后在您的中继器中,您应该能够将结果Eval转换为bool?

(bool?)Eval("LS_Body_Connection")

然后要么针对它调用扩展程序

((bool?)Eval("LS_Body_Connection")).ToYesNoString()

或者,如果这不起作用,请显式调用该方法

BooleanExtensions.ToYesNoString((bool?)Eval("LS_Body_Connection"))
于 2013-05-30T12:04:23.653 回答