使用String.Format在Razor中格式化字符串无法正常工作

时间:2014-11-15 22:29:33

标签: c# regex asp.net-mvc string razor

我在Razor中格式化一个简单的字符串时遇到了问题,我已经验证了常规C#代码中的语法是正确的,但是一旦我使用Razor和String.Format将其迁移到我的HTML页面似乎工作。我正在尝试格式化从##########(###)###-####的电话号码字符串,因此我的代码是 @{ string number = contact.ContactNumber; string formattedNumber = String.Format("({0}){1}-{2}", number.Substring(0, 3), number.Substring(3, 3), number.Substring(6, 4)); }

我只是通过alert(@formattedNumber)尝试验证这是否正确,但它似乎无法正常工作,警报甚至不会出现。但是,如果我的代码只是

@{ string number = contact.ContactNumber; string formattedNumber = String.Format("{0}{1}{2}", number.Substring(0, 3), number.Substring(3, 3), number.Substring(6, 4)); }

请注意,此应该只显示常规号码,警报将正常运行并显示##########  关于为什么(###)###-####没有效果的任何建议?

3 个答案:

答案 0 :(得分:3)

您的格式正确,只是您在alert上输出的格式。

在视图中使用@formattedNumber时,将替换该变量中的值。将该字符串直接传递给JavaScript alert在第一个实例中不起作用,因为您不会得到一个有效的字符串alert。它将在第二个实例中工作,因为您将留下传递给alert函数的有效数字。

想象一个contact.ContactNumber0123456789的示例,第一个示例将提供

的JavaScript代码
alert((012)345-6789);

无效。

第二个示例将起作用,因为它提供了

的JavaScript代码
alert(0123456789);

有效(在此示例中会提醒123456789。)

正如HaukurHaf在评论中指出的那样,您实际上希望将结果输出为字符串,因此您需要在JavaScript的输出周围使用单引号:

alert('@formattedNumber'); //note the single quotes

这意味着在第一个示例中,您将获得输出:

alert('(012)345-6789');

答案 1 :(得分:0)

检查你的控制台,我的猜测是你得到一个导致警报失败的JS错误。这是您的输出代码以及使用正则表达式执行此操作的替代方法。

var number = "1112223333";

//an alternative method using regexes
var regexFormat = Regex.Replace(number, @"^(\d{3})(\d{3})(\d{4})$", "($1)$2-$3");

//The methods you provided
string formattedNumber = String.Format("{0}{1}{2}", number.Substring(0, 3), number.Substring(3, 3), number.Substring(6, 4));
string formattedNumber1 = String.Format("({0}){1}-{2}", number.Substring(0, 3), number.Substring(3, 3), number.Substring(6, 4));

这是以下输出:

     regexFormat = (111)222-3333
 formattedNumber = 1112223333
formattedNumber1 = (111)222-3333

regexFormatformattedNumber1都应该为您提供所需的信息。我个人觉得这个例子中的正则表达式更容易阅读。

答案 2 :(得分:0)

您如何打印HTML中的数字?做以下工作对我来说很好:

    @{
        string number = "0712345678";
        string formattedNumber = String.Format("({0}){1}-{2}", number.Substring(0, 3), number.Substring(3, 3), number.Substring(6, 4));
    }

    <div>@formattedNumber</div>

我怀疑你的问题不在于字符串的格式化(你拥有它的方式是完全合法的),但可能与你尝试显示字符串的方式有关?