2013-12-09 171 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")%>' />