【问题标题】:string.Format not working in C# razor when inside if statement在 if 语句中时,string.Format 在 C# razor 中不起作用
【发布时间】:2015-08-20 13:18:21
【问题描述】:

我在剃刀视图中使用 string.Format 来格式化来自我的 viewModel 的项目。

当我这样使用它时它工作正常:

<td>
   <b>@string.Format("{0:c}", item.TotalCreditPaid)</b>
</td>

但是,当我尝试在 if 语句中使用它时,它不会在视图中显示任何内容:

      <td>
          <b>@if (item.AverageTimeToPay != null)
          {
            string.Format("{0} Days", item.AverageTimeToPay);
          }
          </b>
     </td>

我单步执行它并且 if 被击中,item.AverageTimeToPay 的值为 12,但它没有显示任何内容。

知道为什么会这样吗?谢谢!

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor


    【解决方案1】:

    您缺少@ 和括号,请将其改为此。

      <td>
          @if (item.AverageTimeToPay != null)
          {
            <b>@(string.Format("{0} Days", item.AverageTimeToPay))</b>
          }
     </td>
    

    【讨论】:

    • 渲染一个空的&lt;b&gt; 没有意义,我个人会将b 元素移动到 if 语句中并使用它来指示值的渲染
    • 我会这样做的。这让它工作了。我将@ 符号放在不带括号的字符串前面。
    • @musefan 正确,我同意,但这不是问题所在。 :)
    • @cfly24 没问题。谢谢。 :)
    • @hutchonoid:是的,这是一个公平的观点,尽管我认为如果可能的话,在回答时改进代码是我们的责任,但这并不是什么大问题。如果您想知道,这也不是我的反对意见
    【解决方案2】:

    您没有将输出作为字符串呈现为 Html,您可以通过两种方式进行操作

    1)

     <b>
      @if (item.AverageTimeToPay != null)
      {
        @:@string.Format("{0} Days", item.AverageTimeToPay);
      }
      </b>
    

    2)

      @if (item.AverageTimeToPay != null)
      {
        <b>@string.Format("{0} Days", item.AverageTimeToPay)</b>
      }
    

    检查这个 fiddle

    【讨论】:

    • 我喜欢@:@ 的解决方案。谢谢!不过,您应该在此处省略分号。它将被渲染到屏幕上。
    【解决方案3】:

    代码正在运行,但它没有向页面发送任何内容。

    这将自动发送到页面:

    @string.Format("{0:c}", item.TotalCreditPaid)
    

    因为 Razor 语法的工作原理。基本上,代码行的输出被发送到页面。然而,这只是简单的代码:

    string.Format("{0} Days", item.AverageTimeToPay);
    

    它本身不做任何事情,需要对其输出做一些事情。在您的第二个示例中,if 的输出被发送到页面,但if 块不输出任何内容。 (这里的线索是那个分号。它很微妙,但它表明这只是一个服务器端代码行,而不是 Razor 输出语句。)

    您需要做的就是告诉它输出到页面:

    <td>
        @if (item.AverageTimeToPay != null)
        {
            <b>@string.Format("{0} Days", item.AverageTimeToPay)</b>
        }
    </td>
    

    【讨论】:

      【解决方案4】:

      问题是你没有跳出代码块。

      试试这个:

        <td>
            @if (item.AverageTimeToPay != null)
            {
              <b>@string.Format("{0} Days", item.AverageTimeToPay)</b>
            }
       </td>
      

        <td>
            <b>@if (item.AverageTimeToPay != null)
            {
              @:@string.Format("{0} Days", item.AverageTimeToPay);
            }
            </b>
       </td>
      

      【讨论】:

        【解决方案5】:

        您需要将字符串打印到页面上,请尝试:

        <td>
            <b>@if (item.AverageTimeToPay != null)
            {
                @string.Format("{0} Days", item.AverageTimeToPay);
            }
            </b>
        </td>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-05-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-12
          • 2016-04-25
          • 1970-01-01
          相关资源
          最近更新 更多