【问题标题】:Formatting String in Razor with String.Format not working correctly使用 String.Format 在 Razor 中格式化字符串无法正常工作
【发布时间】:2014-11-15 22:29:33
【问题描述】:

我在 Razor 中格式化简单字符串时遇到问题,我已经验证了常规 C# 代码中的语法是正确的,但是一旦我使用 Razor 将它迁移到我的 HTML 页面,String.Format 似乎没有工作。我正在尝试将电话号码字符串从########## 格式化为(###)###-#### 所以我的代码是 @{ 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)); }

请注意,这个应该只显示常规数字,警报将正常工作并显示########## 关于(###)###-#### 为何不起作用的任何建议?

【问题讨论】:

  • 您应该执行 alert('@formattedNumber') 以使警报正常工作。注意单引号,因为这是一个字符串。
  • 哇,这确实有效。我认为这可能刚刚解决了我的整个问题

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


【解决方案1】:

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

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

想象一个例子,其中contact.ContactNumber0123456789,第一个例子将给出 JavaScript 代码

alert((012)345-6789);

这是无效的。

第二个例子会起作用,因为它给出了 JavaScript 代码

alert(0123456789);

这是有效的(在这个例子中它会提醒123456789)。

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

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

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

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

【讨论】:

    【解决方案2】:

    检查您的控制台,我猜您遇到了一个 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 都应该为您提供所需的内容。在这种情况下,我个人认为正则表达式更容易阅读。

    【讨论】:

      【解决方案3】:

      您如何在 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>
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多