gridview中的#eval电话号码

时间:2012-05-15 19:15:20

标签: c# asp.net regex string gridview

我想在asp.net gridview中将电话号码显示为掩码格式(999)999-9999。

<ItemTemplate>
    <asp:Label ID="Label4" runat="server" Text='<%# (Eval("OrgContactPhone").ToString().Length>50)?Eval("OrgContactPhone").ToString().Substring(0,50):Eval("OrgContactPhone") %>'></asp:Label>
</ItemTemplate>

所以有两个问题。

  1. 如何格式化?我知道有string.format的东西。但请看下一个问题。
  2. 如果为null,则不显示任何内容。
  3. 感谢。

2 个答案:

答案 0 :(得分:4)

这是我写的link to a similar (previous) answer

最终你想要一个代码隐藏函数来返回你的格式化文本。此功能允许您对所有电话号码进行统一格式化。如果您需要更改格式,只需更改一个方法即可。

public object FormatPhoneNumber(string phoneNumber)
{
   // return nothing if the string is null
   if(String.IsNullOrEmpty(phoneNumber))
   {
       return "";    
   }

   // invalid phone number submitted
   if(phoneNumber.Length != 10)
   {
       throw new System.ArgumentException("Phone Number must contain 10 digits", "phoneNumber");
   }

   // probably want one more check to ensure the string contains numbers and not characters, but then again, hopefully that's handled on input validation.

   // if the int is valid, return the formatted text
   return string.Format("({0}) {1}-{2}",
          phoneNumber.Substring(0, 3),
          phoneNumber.Substring(3, 3),
          phoneNumber.Substring(6));
}

你可以从你的aspx页面中调用它。

<ItemTemplate>
    <asp:Label ID="Label4" runat="server" Text='<%# FormatPhoneNumber(Eval("OrgContactPhone").ToString()) %>'></asp:Label>
</ItemTemplate>

答案 1 :(得分:0)

为什么要检查电话号码长度是否大于50? 这将完成我认为的工作。但我不喜欢为每一行做int.Parse ......

<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# 
(Eval("OrgContactPhone") != null ? (((Eval("OrgContactPhone").ToString().Length>50) ? int.Parse(Eval("OrgContactPhone").Substring(0,10)).ToString("(###)###-####") : "") : (int.Parse(Eval("OrgContactPhone")).ToString("(###)###-####")) : ""%>'></asp:Label>
</ItemTemplate>