2013-12-09 138 views
0

我想使用Eval在.aspx页面的标签上格式化电话号码(存储为字符串),但无法使其工作。我曾尝试通过以下方式这样做:使用Eval格式化电话号码

<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来完成。

任何帮助,非常感谢!

回答

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

所以你除了是'ToString'方法? –

+0

是的,先生。我犯了一个错误? –

+0

感谢您的建议,但没有奏效。格式保持不变。此外,如果记录没有电话号码,则会引发NullReferenceException。 – Sesame

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事件上做,如果你正在做更多的格式化。另外,我认为你的格式可以针对一个数字而不是一个字符串。

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")%>' />