4

我在 VS2012 中创建了两个应用程序

  1. 应用#1。MVC 3 , 网络 4.5
  2. 应用#2。MVC 4 , 网络 4.5

现在我打开任何 .cshtml 文件并添加以下代码:

<div>
@if (true)
{
      @string.Format("{0}", "test")
}
</div>

它在 Application#1 (mvc3) 中工作得很好,我看到显示“测试”字样。但它在 Application#2 (mvc4) 中不起作用。

任何人都可以解释它为什么会发生以及应该改变什么?

更新:我刚刚发现了一件非常奇怪的事情。如果您将 @string.format("some text") 替换为 @String.format("some text") 一切正常(注意大写字符串)

4

3 回答 3

6

升级时我们遇到了类似的问题......看起来简单的写入@string.Format("{0}", "test")将不再像在 MVC3 中那样直接写入页面。相反,您必须执行以下操作:

<div>
@if (true)
{
      Html.Raw(string.Format("{0}", "test"));
}
</div>

或者

<div>
@if (true)
{
      <text>@string.Format("{0}", "test"))</text> //added @ to evaluate the expression instead of treating as string literal
}
</div>
于 2012-10-02T14:08:42.890 回答
0

你在使用 Razor 引擎吗?

既然你在一个@if块中,你可以写:string.Format("{0}", "test")而不是 @string.Format("{0}", "test").

注意@

于 2012-10-02T07:07:46.343 回答
0

在 Razor Syntax for Conditional check 中,您可以使用一个 @ 符号开始一个块,然后将您的 Condition 放入其中。

例如

  @{var price=20;}
<html>
<body>
@if (price>30)
  {
  <p>The price is too high.</p>
  }
else
  {
  <p>The price is OK.</p>
  }
</body>
</html>

因此,在您的情况下,您在一个块内使用两个 @ 。检查该部分,它将得到解决。

所以你的代码块应该如下所示。

<div>
@if (Model == null)
{
      <p>@string.Format("{0}", "test")</p>
}
</div>

最重要的是,如果您像在代码行中那样两次输入“@”,它将为您提供如下图所示的提示。这是 Razor 语法 4.0 的功能。你也错过了“;” 在你的代码行中。

在此处输入图像描述

http://www.w3schools.com/aspnet/razor_cs_logic.asp

于 2012-10-02T07:11:06.543 回答