格式化字符串电话号码MVC Razor无需解析为十进制

cfl*_*y24 5 c# asp.net-mvc string-formatting razor asp.net-mvc-4

我正在尝试格式化从我的viewModel循环的电话号码,如下所示:(###) ###-####无需将字符串解析为小数.

此方法给出Formatting is specified, but argument is not IFormattable错误:

@foreach (var client in Model.Clients)
{
    <td>@String.Format("{0:(###) ###-####}", client.TelephoneNumber)</td>
}
Run Code Online (Sandbox Code Playgroud)

所以,我需要解析为小数:

@foreach (var client in Model.Clients)
{
    <td>@String.Format("{0:(###) ###-####}", Decimal.Parse(client.TelephoneNumber))</td>
}
Run Code Online (Sandbox Code Playgroud)

但是无法保证循环的数字只是数字,因此最有可能至少一次解析尝试失败.

有没有办法实现这种格式,而无需解析为小数?

teo*_*kot 2

如果您TelephoneNumber是a,string则始终可以使用子字符串来格式化数字。它不是那么干净,但您不需要任何单独的库并转换为decimal

        @String.Format("({0}) {1}-{2}"
            , client.TelephoneNumber.Substring(0, 3)
            , client.TelephoneNumber.Substring(3, 3)
            , client.TelephoneNumber.Substring(6, client.TelephoneNumber.Length - 6))
Run Code Online (Sandbox Code Playgroud)