1

这是我尝试过的,但我的编译器并没有很好地接受它:

<%#(String.IsNullOrEmpty(Eval("WK_PHONE_EXT").ToString()) || ((Eval("WK_PHONE_EXT").ToString().Length = 4) ? "N/A" : Eval("WK_PHONE_EXT"))%>

我想检查字符串是否为空或为空,或者长度是否等于 4,如果是,那么("WK_PHONE_EXT").ToString将读取“N/A”。我该怎么做呢?

4

3 回答 3

5

在我看来,括号不匹配。

((Eval("WK_PHONE_EXT").ToString().Length = 4)

..................................................... .................................. ^ 就在那儿

您也可以删除不必要的左括号。

正如 Omada 所指出的,Length = 4需要Length == 4

我喜欢扩展我的内联以避免这些问题。像这样:

(String.IsNullOrEmpty(Eval("WK_PHONE_EXT").ToString()) 
    || ((Eval("WK_PHONE_EXT").ToString().Length = 4)
    ? "N/A" 
    : Eval("WK_PHONE_EXT")
)          

理想情况下,第二行的括号不匹配会更明显。

我更喜欢卡尔的方法。如果内联有那么大,它不应该是内联。

于 2013-08-14T18:09:29.500 回答
3

在您的页面上创建一个方法,而不是与标记中编程的运行时捉迷藏错误作斗争,如下所示:

public string GetPhoneExtension(string phoneExtension)
{
    if((String.IsNullOrEmpty(phoneExtension) || (phoneExtension.Length == 4))
    {
        return "N/A";
    }

    return phoneExtension;
}

现在在您的标记中,您可以调用此函数,如下所示:

<%# GetPhoneExtension(Eval("WK_PHONE_EXT").ToString())%>

这为您提供了 Visual Studio 中 IntelliSense 的强大功能和编译时检查,而不是针对大多数问题的运行时检查。在我看来,它还可以产生更清晰的标记,您只需编写Eval()一次调用,减少在其他Eval()调用中出现拼写错误的机会。

于 2013-08-14T18:15:01.667 回答
2

你很亲近!将等号更改为双等号并修复括号: ((Eval("WK_PHONE_EXT").ToString().Length == 4))

于 2013-08-14T18:09:58.523 回答