string.Format在内部if语句时无法在C#razor中工作

时间:2015-08-20 13:18:22

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

我在剃须刀视图中使用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,但它没有显示任何内容。

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

5 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

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

这会自动发出到页面:

@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>

答案 2 :(得分:0)

问题是你没有突破代码块。

请改为尝试:

  <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>

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

您没有将输出呈现为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