【问题标题】:Format phone number using Eval使用 Eval 格式化电话号码
【发布时间】:2013-12-09 19:22:37
【问题描述】:

我正在尝试使用 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 来完成。

非常感谢任何帮助!

【问题讨论】:

    标签: asp.net formatting label eval


    【解决方案1】:

    你不能把你的代码放在标签标签的文本属性中。这将导致错误“服务器标记格式不正确”。

    你应该把你的代码放在标签里

    下面是一个例子:

    <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>
    

    【讨论】:

    • 那么你添加的是ToString方法?
    • 是的,先生。我错了吗?
    • 感谢您的建议,但没有奏效。格式保持不变。此外,如果记录没有电话号码,它会抛出 NullReferenceException。
    • 最好稍微描述一下你的答案。如果你,不要因为低质量而删除答案。如果这听起来不熟悉,请查看常见问题解答
    • @AndrewPaes 只要保证 PhoneNumber 是一个数字就可以工作......并且只要您的区号不超过 213。Int32 的最大值是 @ 987654324@ 或电话号码(214) 748-3647
    【解决方案2】:

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

    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 事件中进行。另外,我认为您的格式适用于数字而不是字符串。

    【讨论】:

      【解决方案3】:

      我知道这已经有一年了,但更简单的方法是使用内置的 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")%>' />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-16
        • 1970-01-01
        • 2020-02-05
        • 2011-08-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多