如果嵌套在if语句中,String.Format不会在视图中使用razor代码进行渲染

时间:2018-04-10 04:10:49

标签: asp.net-mvc razor

我在下面有这个代码,如果我将String.Format放在if语句中,则在视图中不会呈现任何内容。仅供参考 - 如果我从if语句中删除半冒号,则会出现一条红线表示错误。这不会发生在非if语句

@{
   TimeSpan span = (ybEvent.UtcDate.AddDays(-1) - DateTime.UtcNow);
}
// this works
@String.Format("{0}d {1}hr {2}min", span.Days, span.Hours, span.Minutes)

// this doesn't work - does not render anything in view
@if (span.Days > 0)
  {
     String.Format("{0}d {1}hr {2}min", span.Days, span.Hours, span.Minutes);
   } else
   {
    if (span.Hours > 0)
    {
        String.Format("{0}hr {1}min", span.Hours, span.Minutes);
    } else
    {
      String.Format("{0}min", span.Minutes);
    }
 }

1 个答案:

答案 0 :(得分:4)

尝试将其放入标签内:

@if (span.Days > 0)
{
    <text>@String.Format("{0}d {1}hr {2}min", span.Days, span.Hours, span.Minutes)</text>
}
else
{
    if (span.Hours > 0)
    {
        <text>@String.Format("{0}hr {1}min", span.Hours, span.Minutes)</text>
    }
    else
    {
        <text>@String.Format("{0}min", span.Minutes)</text>
    }
}

<text>标记在Razor中具有特殊含义,它不会被发送到输出。当然,您可以使用任何其他HTML标记,例如<span><div>来包装输出