我正在尝试使用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完成。< / p>
非常感谢任何帮助!
答案 0 :(得分: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>
答案 1 :(得分: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事件上执行此操作。另外,我认为你的格式化对数字有效,但不是字符串。
答案 2 :(得分: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")%>' />