我在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));
}
请注意,此应该只显示常规号码,警报将正常运行并显示##########
关于为什么(###)###-####
没有效果的任何建议?
答案 0 :(得分:3)
您的格式正确,只是您在alert
上输出的格式。
在视图中使用@formattedNumber
时,将替换该变量中的值。将该字符串直接传递给JavaScript alert
在第一个实例中不起作用,因为您不会得到一个有效的字符串alert
。它将在第二个实例中工作,因为您将留下传递给alert
函数的有效数字。
想象一个contact.ContactNumber
为0123456789
的示例,第一个示例将提供
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
regexFormat
和formattedNumber1
都应该为您提供所需的信息。我个人觉得这个例子中的正则表达式更容易阅读。
答案 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>
我怀疑你的问题不在于字符串的格式化(你拥有它的方式是完全合法的),但可能与你尝试显示字符串的方式有关?