1

我想在 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. 如果为空,则不显示任何内容。

谢谢。

4

2 回答 2

4

这是我写的类似(以前)答案的链接。

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

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>
于 2012-05-15T19:18:28.473 回答
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>
于 2012-05-15T19:37:04.670 回答