使用Eval格式化电话号码

时间:2013-12-09 19:22:37

标签: asp.net formatting label eval

我正在尝试使用Eval格式化.aspx页面上的标签中的电话号码(存储为字符串)但是无法使其正常工作。我尝试过以下方式:

<asp:Label ID="Label2" runat="server" Text='<%# Eval("PhoneNumber", "{0:(###) ###-####}")%>'></asp:Label>
<asp:Label ID="Label3" runat="server" Text='<%# string.Format("{0:(###) ###-####}", Eval("PhoneNumber")) %>'></asp:Label>

我知道我可以创建一个格式化字符串的方法,但我只在这个应用程序中显示一次电话号码并且不关心可重用性 - 而且我很想知道是否可以使用Eval完成。< / p>

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

您不能将代码放在Label标签的Text属性中。这将导致错误“服务器标签格式不正确”。

您应该将代码放在标记

以下是一个例子:

<asp:Label ID="Label1" runat="server" Text="Label"><%# !String.IsNullOrEmpty(Convert.ToString(Eval("PhoneNumber"))) ? String.Format("{0:(###) ###-####}", Convert.ToInt64(Eval("PhoneNumber").ToString())) : String.Empty%></asp:Label>

答案 1 :(得分:0)

我认为最好集中一个功能来格式化电话号码,因为您可能会在多个地方执行此操作。你可以这样做:

public static class Toolkit
{
    public static string FormatPhone(string n)
    {
        string returnNumber = n;
        //Handle US Phones (10 digits) or else don't format
        if (!String.IsNullOrEmpty(n) && n.Length == 10)
        {
            string areaCode = n.Substring(0, 3);
            string usPrefix = n.Substring(3, 3);
            string usNum = n.Substring(6, 4);
            returnNumber = String.Format("({0}) {1}-{2}", areaCode, usPrefix, usNum);
        }
        return returnNumber;
    }
}

然后在你的转发器中调用它:

<asp:Label ID="Label1" runat="server" Text='<%# YOURNAMESPACE.Toolkit.FormatPhone(Convert.ToString(DataBinder.Eval(Container.DataItem, "PhoneNumber")))%>'></asp:Label>

当然,在将电话号码作为数据源传递之前格式化电话号码可能更简洁......或者如果您要进行更多格式化,则可以在DataBound事件上执行此操作。另外,我认为你的格式化对数字有效,但不是字符串。

答案 2 :(得分:0)

我知道这已经有一年了,但更简单的方法就是利用内置的RegEx.Replace:

<asp:Label ID="Label1" runat="server" Text='<%# Regex.Replace(Eval("PhoneNumber"), "(\d\d\d)(\d\d\d)(\d\d\d\d)", "($1)$2-$3")%>' />